出于各种目的,将侦听器附加到路由器可能是有利的,每次路由更改时都会调用该侦听器。例如,这可以用于触发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);
});
}
}
在此示例中,使用新参数更新订阅调用的 。订阅正在进行的路由器状态图片的正确方法是什么?
答案 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
});
}
}
当路由器启动从一个路由到另一个路由的导航时,将触发导航启动事件。 路由器导航结束时会触发导航结束事件。 我们可以根据我们的要求添加逻辑。 我希望它有所帮助。