当前激活路线的观测值?

时间:2018-04-17 14:24:38

标签: angular angular-router

出于各种目的,将侦听器附加到路由器可能是有利的,每次路由更改时都会调用该侦听器。例如,这可以用于触发AJAX调用。

令人费解的是,route.params observable和route.url observable在路由更改时不会更新,因此不适合此任务。

考虑以下服务,

@Injectable()
export class SagasService {
    constructor(private http: HttpClient, private route : ActivatedRoute, private router : Router ){
        Observable.combineLatest(
            route.params,
            route.url
        )
        .subscribe(([params,url])=>{
            console.log(params,url);
        });
        router.events.subscribe(e=>{
            Observable.combineLatest(
                 route.params,
                 route.url
             )
             .subscribe(([params,url])=>{
                 // the route changes... but this... it does not trigger
                 console.log(params,url);
             });
    }
}

在此示例中,使用新参数更新订阅调用的 。订阅正在进行的路由器状态图片的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

要实现这一目标,您需要订阅路由器事件,

import 'rxjs/add/operator/filter';
Injectable()
export class SagasService {
    constructor(private http: HttpClient, private route : ActivatedRoute, private router : Router ){
// navigation start
       router.events.filter(event => event instanceof NavigationStart)
            .subscribe(() => {
// add your logic here
});
//navigation ends here
 router.events
            .filter(event => event instanceof NavigationEnd)
            .subscribe(() => {
// add your logic here
});


    }
}

当路由器启动从一个路由到另一个路由的导航时,将触发导航启动事件。 路由器导航结束时会触发导航结束事件。 我们可以根据我们的要求添加逻辑。 我希望它有所帮助。