首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重路由时的角4调用分量法

重路由时的角4调用分量法
EN

Stack Overflow用户
提问于 2018-11-10 17:10:57
回答 3查看 1.9K关注 0票数 2

我有一个路由策略,它在路由到另一个组件时不会破坏组件。当(重新)路由到组件时,我想调用组件的一个方法。

到目前为止,我已经尝试用各自的方法AfterContentCheckedAfteViewChecked实现接口ngAfterContentChecked和‘`ngAfterViewChecked。实现其中一个接口的唯一问题是,在路由到组件时会多次调用该方法,这对我来说是一个性能问题。

在研究web的过程中,我还没有遇到一个接口,我可以实现它来获得所期望的行为。

解决这个问题的唯一可能性是在路由器中验证选择了哪条路由/路径,如果选择了所需的路由/路径,我会调用组件的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-10 19:46:32

您可以订阅路由器事件,这将在每次路由更改时触发一个事件。然后您可以获得该事件的活动路由,并检查当前所在组件的路由是否等于该路由。

提示:使用instanceof NavigationEnd对事件进行筛选

票数 1
EN

Stack Overflow用户

发布于 2018-11-10 20:00:12

您基本上可以将注入Router作为依赖项添加,然后在其上订阅events。有一个路由器公开的事件列表。

因为我们只关心NavigationEnd事件,所以可以使用filter操作符过滤掉它。

事件数据具有url属性,可用于与NavigationEnd之后获得的路径进行比较。

代码语言:javascript
运行
复制
this.router.events
.pipe(
  filter(event => event instanceof NavigationEnd)
)
.subscribe((event: any) => {
  console.log('Got the Event URL as '. event.url);
})

这是一个供您参考的样本StackBlitz

票数 1
EN

Stack Overflow用户

发布于 2018-11-10 17:17:11

每当路由发生时,都会创建组件并调用ngOnInit函数。

代码语言:javascript
运行
复制
export class TestComponent implements OnInit{
  constructor(){
     //called first time before the ngOnInit()
  }

  ngOnInit(){
     //called after the constructor
  }
}

我们还有两种选择-

  1. Resover - resolve函数
  2. Gaurds - canActive函数

每当路由更改时,ResolverGaurd都会被执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53241388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档