gpt4 book ai didi

Angular 2 路由器事件不是第一次触发?

转载 作者:太空狗 更新时间:2023-10-29 16:56:33 25 4
gpt4 key购买 nike

我正在从一个组件路由到另一个组件。路由完成后,我想使用上一条路由中的 URL。我已将下面的代码放入路由到的组件的构造函数中,但它不会在第一条路由上触发。在第一条路线之后,该功能每次都会触发。

this.router.events
.filter(e => e instanceof NavigationEnd)
.pairwise().subscribe((e) => {
console.log(e);
});

如果我删除 pairwise 函数,它似乎会在第一条路线上触发,但它只列出当前路线,而不是前一条路线。

 router.events
.filter(e => e instanceof NavigationEnd)
.subscribe(e => {
console.log(e);
});

我的目标是在新组件路由到时检索以前的路由。我在这里做错了什么?

最佳答案

正如我所见,所有这些解决方案都传递给 route.snapshot 并尝试将 NavigationEnd 操作与其结合。但是,如果您尝试访问该页面 - 它不会被 router.events 的第一个 NavigationEnd 触发。快照还会触发父路由,而不是子路由。所以首先你可以使用子路由,但它也不会像第一个那样被触发......

this.router.events.pipe(
filter((event) => event instanceof NavigationEnd),
map(() => this.aRoute.snapshot),
map((route) => {
while (route.firstChild) {
route = route.firstChild;
}
return route;
})
)

所以对我来说,在正确当前路线上第一次开火的最佳解决方案是使用 router.events + router.url 和一种类型 导航结束:

 this.router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
startWith(this.router)
)
.subscribe((event: NavigationEnd) => {
// there will be first router.url - and next - router events
})

关于Angular 2 路由器事件不是第一次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43237318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com