根据当前可用路线列表激活第一个子路线

时间:2018-05-22 16:05:07

标签: angular angular-routing

假设我的Angular应用程序中有以下路由结构:

children: [
    {
        component: Access,
        path: 'access'
    },
    {
        component: Authentication,
        path: 'authentication'
    },
    {
        component: Domains,
        path: 'domains'
    },
    {
        component: Recovery,
        path: 'recovery'
    },
    {
        path: '**',
        pathMatch: 'full',
        redirectTo: 'authentication'
    }
]

通过上述实现,因为我们默认为authentication路径,所以它始终是当前选择的路径。但是,我的不同用户在我的应用程序中有不同的访问策略,有些用户无法访问authentication路由。在这种情况下,他们应该呈现的第一条路线是access路线。

是否可以代替将此authentication路径硬编码为默认路径,以选择列表中可用的第一个路径?

完全管理

身份验证=> Access => Domains =>回收

自定义管理

Access => Domains =>回收

我希望Access成为第一个选定的(活动的),因为它是儿童列表中第一个可用的。

也许是自定义解析程序或后卫来决定是否在运行时说用户是Full还是Custom并从那里决定?

由于

1 个答案:

答案 0 :(得分:0)

这听起来像路由保护的完美用例。例如,检查如何实现一个:

https://medium.com/@ryanchenkie_40935/angular-authentication-using-route-guards-bf7a4ca13ae3

简而言之:

@Injectable()
export class AuthGuardService implements CanActivate {
  constructor(public auth: AuthService, public router: Router) {}
  canActivate(): boolean {
    if (!this.auth.isAuthenticated()) {
      this.router.navigate(['access']);
      return false;
    }
    return true;
  }
}

并在您的路线中:

import { 
  AuthGuardService as AuthGuard 
} from './auth/auth-guard.service';
// ...
{
    component: Authentication,
    path: 'authentication',
    canActivate: [AuthGuard]
},