Я использую angular2 rc6 и не против использовать последний объявленный релиз. Я пытаюсь реализовать розетку маршрутизатора, чтобы обеспечить доступ только к аутентифицированным пользователям.Angular2: Extend RouterOutlet в новой версии rc6 для активации метода
У меня есть этот блок кода, который работает в предыдущем выпуске.
Старый Код:
import {Directive, Attribute, ElementRef, DynamicComponentLoader} from 'angular2/core';
import {Router, RouterOutlet, ComponentInstruction} from 'angular2/router';
@Directive({
selector: 'router-outlet'
})
export class AuthCheck extends RouterOutlet {
publicRoutes: any;
private parentRouter: Router;
constructor(_elementRef: ElementRef, _loader: DynamicComponentLoader, _parentRouter: Router,
@Attribute('name')nameAttr:string) {
super(_elementRef, _loader, _parentRouter, nameAttr);
this.parentRouter = _parentRouter;
this.publicRoutes = {
'login': true
};
}
activate(instruction: ComponentInstruction) {
let url = instruction.urlPath;
if(!this.publicRoutes[url] && !localStorage.getItem('auth_key')){
this.parentRouter.navigateByUrl('/login');
}
return super.activate(instruction);
}
}
Я пытаюсь изменить код, чтобы работать в гсе 6, но нужна помощь для реализации методы «активировать», чтобы обеспечить такое же поведение:
Изменен код:
//import {Directive, Attribute, ElementRef, DynamicComponentLoader} from '@angular/core';
import {Router, RouterOutlet, RouterOutletMap, ActivatedRoute, } from '@angular/router';
import {
Component, Directive, ComponentMetadata, Input, ReflectiveInjector,
ViewContainerRef, Compiler, NgModule, ComponentRef, ComponentFactoryResolver, Injector, ResolvedReflectiveProvider
} from '@angular/core';
@Directive({
selector: 'router-outlet'
})
export class AuthCheck extends RouterOutlet {
publicRoutes: any;
private parentRouter: RouterOutletMap;
constructor(_parentOutletMap: RouterOutletMap, _location: ViewContainerRef, _resolver: ComponentFactoryResolver,
name: string)
//constructor(_elementRef: ViewContainerRef, _loader: any, _parentRouter: Router,
// @Attribute('name') nameAttr: string)
{
super(_parentOutletMap, _location, _resolver, name);
this.parentRouter = _parentOutletMap;
this.publicRoutes = {
'login': true
};
}
activate(activatedRoute: ActivatedRoute, loadedResolver: ComponentFactoryResolver, loadedInjector: Injector, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap) {
//implementation
}
//activate(instruction: any) {
// let url = instruction.urlPath;
// if (!this.publicRoutes[url] && !localStorage.getItem('auth_key')) {
// this.parentRouter.registerOutlet.('/login');
// }
// return super.activate(instruction);
//}
}
Вы можете разместить код, который работал? ответ кажется кодом для чего-то другого, а не вашего кода. –
В принятом ответе используется свойство «canActivate» маршрута, которое выполняет задание, которое запросил запрос. Но меня интересует, есть ли решение, использующее метод «активировать» по другим причинам. –