当前位置: 首页 > 知识库问答 >
问题:

如何在Angular中检测路由变化?

毕魁
2023-03-14

我正在查找在我的AppComponent中检测路由更改。

此后,我将检查全局用户令牌,看看他是否已登录。然后我可以重定向用户,如果他没有登录。

共有1个答案

壤驷泓
2023-03-14

在Angular 2中,您可以subscribe(Rx事件)到路由器实例。所以你可以做一些事情

class MyClass {
  constructor(private router: Router) {
    router.subscribe((val) => /*whatever*/)
  }
}

编辑(自RC.1起)

class MyClass {
  constructor(private router: Router) {
    router.changes.subscribe((val) => /*whatever*/)
  }
}

编辑2(自2.0.0起)

另请参见:Router.Events文档

class MyClass {
  constructor(private router: Router) {
    router.events.subscribe((val) => {
        // see also 
        console.log(val instanceof NavigationEnd) 
    });
  }
}
 类似资料:
  • 注意:这里有很多不同的答案,而且大多数在某个时候都是有效的。事实上,当Angular团队改变其路由器时,工作的方式已经改变了很多次。Router3.0版本将最终成为Angular中的路由器,它打破了许多这些解决方案,但提供了一个非常简单的解决方案。从RC.3开始,首选解决方案是使用,如本答案所示。 在Angular应用程序中(我写这篇文章的时候是2.0.0-Beta.0版本中的最新版本),如何确定

  • 当在本地运行我的Angular应用程序时,我可以转到例如localhost:4200/login。然而,当我部署我的Angular应用程序时,当我转到website.com/login时,我会得到“在此服务器上找不到请求的URL/登录”。我的应用程序部署到Google Cloud AppEngine上。

  • 由于双向数据绑定的本质,在Angular 1中不能保证父节点在子节点之前总是被检查。 有可能子节点可以改变父节点或兄弟节点或树中的任何其他节点,这又会在链中触发新的更新。 这使得变化检测机制难以遍历所有节点,并可能掉入具有臭名昭着的“震荡”循环中: 在Angular 2中,改变被保证单向传播。 更改检测器将遍历每个节点一次,始终从根开始。 这意味着父组件始终在其子组件之前检查。

  • 我们将创建一个简单的来显示一个电影的信息。 这个应用程序将只包含两个组件:MovieComponent显示有关电影的信息和MainComponent,它使用按钮来保存对电影的引用以执行一些动作。 我们的AppComponent组件将有三个属性:应用程序的slogan,电影的title(标题)和(主角)。 最后两个属性将被传递到模板中引用的MovieComponent元素。 在上面的代码片段中,我们

  • 我有一个父组件,它使用ajax请求检索对象数组。 该组件有两个子组件:一个以树结构显示对象,另一个以表格格式呈现其内容。父元素通过@input属性将数组传递给它们的子元素,子元素可以正确地显示内容。一切如预期。 当您更改对象中的某些字段时,就会出现问题:子组件不会收到这些更改的通知。只有当您手动将数组重新分配给其变量时,才会触发更改。 我已经习惯了使用Knockout JS,我需要获得类似于obs

  • 你能告诉我如何在typescript+angular中检查变量的类型吗?