Я новичок в Angular 2, пытаясь защитить маршруты в новом приложении. То, что нужно использовать, похоже, может быть активировано, но даже использование простейшего примера активации может привести к разрыву углов. Я получаю следующую ошибку:Использование Angular 2 Can Activate; TS в порядке, но я получаю сообщение об ошибке
ZoneAwareError message:
"Uncaught (in promise): TypeError: Cannot set property 'stack' of undefined
TypeError: Cannot set property 'stack' of undefined
at NoProviderError.set [as stack] (http://localhost:4200/vendor.bundle.js:6147:61)
at assignAll (http://localhost:4200/vendor.bundle.js:98482:29)
at NoProviderError.ZoneAwareError (http://localhost:4200/vendor.bundle.js:98553:16)
at NoProviderError.BaseError [as constructor] (http://localhost:4200/vendor.bundle.js:6109:16)
at NoProviderError.AbstractProviderError [as constructor] (http://localhost:4200/vendor.bundle.js:58855:16)
at new NoProviderError (http://localhost:4200/vendor.bundle.js:58904:16)
at ReflectiveInjector_._throwOrNull (http://localhost:4200/vendor.bundle.js:80617:19)
at ReflectiveInjector_._getByKeyDefault (http://localhost:4200/vendor.bundle.js:80654:25)
at ReflectiveInjector_._getByKey (http://localhost:4200/vendor.bundle.js:80604:25)
at ReflectiveInjector_.get (http://localhost:4200/vendor.bundle.js:80366:21)
at AppModuleInjector.NgModuleInjector.get (http://localhost:4200/vendor.bundle.js:59758:52)
at PreActivation.getToken (http://localhost:4200/vendor.bundle.js:24841:25)
at MapSubscriber.project (http://localhost:4200/vendor.bundle.js:24737:48)
at MapSubscriber._next (http://localhost:4200/vendor.bundle.js:11337:35)
at MapSubscriber.Subscriber.next (http://localhost:4200/vendor.bundle.js:6655:18)
Мой код следующий.
Можно активировать:
import { Injectable } from '@angular/core';
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
@Injectable()
export class CanActivateAuthGuard implements CanActivate {
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return false;
}
}
маршрутизации модуля:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ThoughtListComponent } from './thoughts/thought-list.component';
import { LoginComponent } from './login/login.component';
import { CanActivateAuthGuard } from './can-activate.service';
const routes: Routes = [
{ path: '', pathMatch: 'full', redirectTo: 'thoughtList' },
{ path: 'login', component: LoginComponent },
{ path: 'thoughtList',
component: ThoughtListComponent,
canActivate: [CanActivateAuthGuard]
}
]
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
export const routableComponents = [
ThoughtListComponent,
LoginComponent
];
Поскольку я использую машинопись, я знаю, что canActivate должен быть в состоянии вернуть простую логическое ... так что я не знаю, почему это ломается. Фактическая трассировка стека находится в коде поставщика, без ссылок на мой код.
Я видел из других сообщений, что неправильная версия зоны (0.7.3) может вызвать ошибку, но я пробовал версии, которые должны работать (0.7.2 & 0.7.4). Остальная часть приложения была построена из углового кли.
Я также отмечаю, что мой код отлично работает, когда я просто комментирую свойство canActivate маршрута ... поэтому что-то особенное для canActivate ломается.
Вы добавили CanActivateAuthGuard поставщикам вашего модуля? –
Похоже, что декларация провайдера отсутствует для маршрута – Gary