Angular 6 Как реализовать canActivateChild - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в Angular Auth Guard.Я успешно интегрировал аутентификацию, так что вошедшие в систему пользователи могут получить доступ к приватным страницам.Для этого я использовал CanActivate.Теперь я собираюсь использовать другой тип защиты, которая не позволяет зарегистрированным пользователям получать доступ к некоторым частным страницам.Из https://www.concretepage.com/angular-2/angular-2-4-route-guards-canactivate-and-canactivatechild-example, я узнал, что могу использовать canActivateChild для достижения аналогичного результата.

В app-routing.module.ts файле я использовал ниже:

const routes: Routes = [ ...
{ path: 'myaccount', loadChildren: '../module/myaccount/myaccount.module#MyAccountModule',canActivate: [AuthGuard] },...];

Подmyaccount, у меня есть несколько других дочерних компонентов.

В myaccount-routing.module.ts я написал следующее:

const routes: Routes = [
...
{ path: 'abc', component: AbcComponent,
    children: [
    { path: 'xyz', component: XyzComponent, canActivateChild: [ AuthGuard ] },
... ]
   }
];

В компоненте abc в myaccount я написалследующие в abc-routing.module.ts:

const routes: Routes = [
...
{ path: 'xyz', component: XyzComponent, canActivateChild: [ AuthGuard ]},
...
];

Это мой auth.guard.ts:

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild} from '@angular/router';
import { CommonService } from './../services/common.service';

@Injectable()
export class AuthGuard implements CanActivate {

  private userData:any={};

    constructor(
        private router: Router,  
        private commService : CommonService
    ) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    ...
    }
    canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): any {
    console.log("fired!);
    return true;
    }
}

Когда я перехожу на страницу xyz из браузера, скажите myaccount/abc/xyz, он должен запуститьКонсоль браузера, однако, я не вижу текст в консоли браузера.В CLI тоже нет ошибок.Я обновил страницу xyz, но не повезло.Нет текста в консоли браузера.Есть идеи?

1 Ответ

0 голосов
/ 08 февраля 2019

Где вы предоставляете AuthGuard ?, из примера он не предоставлен в корне.Вы можете изменить это значение на @Injectable({providedIn:'root'})

РЕДАКТИРОВАТЬ

Взгляните на этот stackblitz , похоже, что canActivateChild срабатывает, когдау него есть родитель canActivate.Если вам нужно выполнить проверку на определенной странице, вы должны добавить еще один canActivate на страницу, которую вы хотите защитить

...