首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略可以通过在router.navigate中传递参数来激活保护

忽略可以通过在router.navigate中传递参数来激活保护
EN

Stack Overflow用户
提问于 2021-07-10 04:41:09
回答 1查看 327关注 0票数 2

我正在寻找一种解决方案,通过传递参数/标志/在路由器导航中传递参数/标志等来忽略一次性保护。

目前的配置:

使用auth canActivate: [CanActivateGuard]

  • resolver -检查子路径应用程序的
  • 标准路由-用于加载快照,当用户获得具有某种路径的URL时,可以加载应用程序,

问题:

  • 上面的机制工作得很好(快照,生成丢失的ngrx存储数据等)
  • ,但为了保护起见,我正在检查存储中是否存在一些值:

代码语言:javascript
运行
复制
  canActivate(): boolean {
    let canActivate = false;
    this.store$.pipe(select(selectSth), take(1)).subscribe(item => {
      if (!!item) {
        return canActivate = true;
      }
      this.router.navigate(['/main']);
      return canActivate = false;
    });
    return canActivate;
  }
}

在解析器之前对

  • canActivate进行了检查,因此即使存储

中存在参数,也无法导航到/main路径。

问题:

有什么解决方案可以在this.router.navigate中添加参数并一次避免保护?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 09:04:46

问题是,在角度上,所有守卫都应该在任何解析器之前执行,所以如果您有带守卫的子路径,除非所有守卫都成功,否则它们会阻塞父解析器。

这一逻辑意味着保护程序的数据应该已经存在(App )或由保护程序加载。

一个可能的解决方案是将数据加载逻辑移动到保护,如果保护成功,则相应的解析器将简单地从存储中选择数据。

如果您不打算一直在一起使用守护程序和解析器,那么您可以引入一个服务,如果需要的话,可以加载数据,并且在两个类中都依赖于服务:守护程序和解析器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68324771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档