问题:我正在尝试访问路由保护正在检查的查询参数,而不是当前的 url 快照查询参数。
ActivatedRoute 只显示他们当前的路由状态,而不是正在传输的路由状态。因此,如果我在“app/users/list”页面上,当为 canActivatedChild 守卫拉取信息时,路由快照是“app/users/list”,但我试图访问他们要去的链接,而不是在哪里他们来自。(这是 Angular 应该做的;这是当前活动的快照)
问题:如何访问假设要防范的正在传输的孩子的查询参数路由?
场景:我有一个用户的列表,每个用户在进入仪表板之前可以去仪表板或编辑器屏幕完成。因此,当用户从用户列表表中单击用户时,路由守卫应该在进入仪表板之前检查用户是否有某些属性不为空,如果他们有一些空属性,则由守卫指导到编辑器页面。仪表板页面由 canActivatedChild 保护器保护,该保护器根据用户是否具有所有可用信息来决定是否可以在仪表板中显示用户的详细信息,如果没有,则将其重定向到编辑器以完成。
// The Link
this.router.navigate(['/dashboard', { id: userId }])
// The Guard
@Injectable()
export class CanShowUserDashboard implements CanActivateChild {
constructor(
private _router: Router,
private _route: ActivatedRoute
) {}
canActivateChild() {
this._route.queryParams.subscribe((next) => {
let queryParams = next.id;
// queryParams is undefined
})
}
}
目标 从仪表板链接获取查询参数,而不是当前活动用户的列表页面。
我得到的唯一解决方案? 正在考虑将用户传递给服务,并让守卫访问服务以提取信息。