角度|防护未在routerLink上触发

时间:2018-09-07 17:04:22

标签: angular service

我正在尝试为我的插件路由实现保护。

我已经为其添加了概念,并且它确实起作用,但是我遇到了两个问题,它们如下:

  • 在Angular应用中单击routerLink时。它似乎根本不叫保安,而是允许用户导航到该路线。
  • 另一个问题是,当通过网址/plugins/team-members导航到该路线时,该页面将不会重定向。

这是我的路由器模块:

const routes = {
    path: 'plugin',
    canActivate: [
        BIPluginGuard
    ],
    children: [
        {
            path: 'team-members',
            component: BIPluginTeamMembers
        },
        {
            path: 'sponsors',
            component: BIPluginSponsors
        }
    ]
};

这是我的警卫:

canActivate(route: ActivatedRouteSnapshot): boolean {
        const currentRoute: string = route.children[0].routeConfig.path;

        const accessiblePlugin: any = this.plugins.find((plugin) => {
            return plugin.path === currentRoute;
        });

        if (!accessiblePlugin || !accessiblePlugin.allowed) {
            this.router.navigate['/dashboard'];
            return false;
        }

        return true;
    }

这是我第一次使用警卫,所以我不确定是否必须在每条路线上都放置canActivate,不过我想尽可能避免这种情况。

2 个答案:

答案 0 :(得分:0)

因此canActivate签名上的有角documentation包含RouterStateSnapshot作为该函数的第二个参数。您可以尝试包括这样的内容吗?

canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean>|Promise<boolean>|boolean 

还要检查此路由卫士是否已在提供者下的app.module.ts中注册

答案 1 :(得分:0)

网址/plugins/team-members/plugin/team-members吗?您的路线将路径指定为path: 'plugin',其中插件是单数。

您能否确认开发者工具中的“网络”标签未显示对团队成员的请求的404错误?