Javascript 在router.navigate in Angular2之后执行代码
我想知道在我使用angular router导航到另一个“视图”后,是否有办法执行某些操作Javascript 在router.navigate in Angular2之后执行代码,javascript,angular,typescript,Javascript,Angular,Typescript,我想知道在我使用angular router导航到另一个“视图”后,是否有办法执行某些操作 this.router.navigate(["/search", "1", ""]); // Everything after navigate does not not get executed. this.sideFiltersService.discoverFilter(category); 如果您从组件A导航到组件B,则导航后,您可以在组件B的ngOnInit()功能中执行任何操作,取决于路由中
this.router.navigate(["/search", "1", ""]);
// Everything after navigate does not not get executed.
this.sideFiltersService.discoverFilter(category);
如果您从
组件A
导航到组件B
,则导航后,您可以在组件B
的ngOnInit()
功能中执行任何操作,取决于路由中传递的参数。不完全确定上下文,但一个选项是使用ActivatedRoute
订阅URL中的更改
下面是一个例子:
...
import { ActivatedRoute } from '@angular/router';
...
private _routerSubscription: any;
// Some class or service
constructor(private _route: ActivatedRoute){
this._routerSubscription = this._route.url.subscribe(url => {
// Your action/function will go here
});
}
如果url不是您所需要的,您可以在ActivatedRoute
中订阅许多其他可观察内容,这些内容列在该链接中
订阅可以在constructor()
或ngOnInit()
中完成,具体取决于最适合您的内容,只需记得在自己完成后进行清理,然后在ngOnDestroy()中取消订阅(
:)
this.router.navigate返回一个承诺,因此您可以简单地使用:
this.router.navigate([“/search”,“1”,“1])。然后(()=>{
//导航成功后,执行任何需要的操作
});代码>您还必须确保没有正在进行的订阅。。。我面临同样的问题,在我的情况下,有一个订阅改变了路线。所以路线已经改变了两次。但实际上,您可以在javascript中使用承诺,这是正确的
this.router.navigate([“/search”,“1”,“1]”)
。然后(成功=>{
如果(成功)
{
//做你的事
}
其他的
{
//做些别的事情
}
})
.catch(错误=>{
//处理错误
});
我在URL中没有任何参数来区分正常调用的路由或通过此方法调用的路由。然后尝试使用共享服务,在ComponentA的服务中设置任何标志,然后导航,然后在ComponentB的ngOnInit()中检查该标志,并执行所需的操作。是否有方法全局获得此承诺?
this._routerSubscription.unsubscribe();
// In typescript you can use the javascript example as well.
// But you can also do:
try
{
let succeeded = await this.router.navigate(["/search", "1", ""]);
if(succeeded)
{
// Do your stuff
}
else
{
// Do some other stuff
}
}
catch(error)
{
// Handle the error
}