Javascript 在router.navigate in Angular2之后执行代码

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()功能中执行任何操作,取决于路由中

我想知道在我使用angular router导航到另一个“视图”后,是否有办法执行某些操作

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
}