首页 > 解决方案 > 如何以角度更改路线对象数据

问题描述

我有如下路线文件

    const routes: Routes = [
  {
    path: '',
    component: DashboardComponent,
    canActivate: [DashboardRoleGuard],
    children: [{
      path: 'admin',
      component: AdminDashboardComponent
      // canActivateChild: [RedirectGuard]
    }, {
      path: 'user',
      component: UserDashboardComponent
      // canActivateChild: [RedirectGuard]
    }],
    data: {
      expectedRole1: ["admin", "SiteAdmin", "OrgAdmin", "SuperAdmin"],
      expectedRole2: ["user", "NormalUser"],
      redirectTo: "",
      isManual: false
    }
  }]

在数据部分我有一个标志 isManual。所以我想改变标志的值。我在路由守卫中尝试了以下代码。

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

// this will be passed from the route config
// on the data property
const expectedRole1 = next.data.expectedRole1;
const expectedRole2 = next.data.expectedRole2;
  debugger
console.log(next.data);  

if (state.url.indexOf("admin") > -1 || state.url.indexOf("user") > -1) {
  next.data["isManual"] = true;
}

但是值没有修改,任何人都让我知道如何做到这一点。

标签: angular

解决方案


为什么不在isManual子路由上添加属性:

const routes: Routes = [
  {
    path: '',
    component: DashboardComponent,
    canActivate: [DashboardRoleGuard],
    children: [{
      path: 'admin',
      component: AdminDashboardComponent,
      data: {isManual: true}
      // canActivateChild: [RedirectGuard]
    }, {
      path: 'user',
      component: UserDashboardComponent,
      data: {isManual: true}
      // canActivateChild: [RedirectGuard]
    }],
    data: {
      expectedRole1: ["admin", "SiteAdmin", "OrgAdmin", "SuperAdmin"],
      expectedRole2: ["user", "NormalUser"],
      redirectTo: "",
      isManual: false
    }

推荐阅读