2017-02-11 10 views
1

Как я могу получить маршрут, который пользователь пытается открыть в защите canActivate в угловом 2?Как получить целевой маршрут в ng2 guard canActivate?

Как я могу сделать сторожевой вахту для каждого изменения параметра маршрута, например. изменение идентификатора в маршруте?

import { Injectable }  from '@angular/core'; 
import {Observable, Observer, Subject} from "rxjs/Rx"; 

@Injectable() 
export class RightsGuard implements CanActivate { 
    constructor(
     private router: Router, 
     private route: ActivatedRoute 
     // private state: RouterStateSnapshot 
    ) { } 

    canActivate(): Observable<boolean> | boolean { 
     var targetUrl = ??? 
     // var targetUrl = this.router.url // is showing previous url? 
     return true; 
    } 
} 

Предложенный ответ в Angular 2 get current route in guard используя private state: RouterStateSnapshot , а затем this.route.url не работает для меня, так как он выдает ошибку DI:

Error: Uncaught (in promise): Error: DI Error 
Error: DI Error 

ответ

2

Следующие, кажется, работает, однако маршрут и государство не должен быть вводится в конструктор, так как это вызывает ошибки.

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean { 
    console.log("route-access",state); 
} 

Однако это приводит к тому, что охранник вызывается только один раз для каждого маршрута. Для изменения параметров маршрута, таких как: id, защита не вызывается. Но это, кажется, коррелируют с ошибкой в ​​3,2 маршрутизатора:

 Смежные вопросы

  • Нет связанных вопросов^_^