2016-07-26 73 views
1

所以我的代碼如下所示:Angular2路由器canActivate無提供虛假

export const routes: RouterConfig = [ 
    { 'path': '', redirectTo: '/jobs', terminal: true, canActivate: [tokenNotExpired()] }, 
    { path: 'account', component: AccountComponent, canActivate: [!tokenNotExpired()] }, 
    { path: 'login', component: LoginComponent }, 
    ...WihRoutes 
]; 

每當我試圖導航到「帳戶」,轉接失敗,因爲它應該,但由於某些原因,它也提供了以下控制檯錯誤:

browser_adapter.ts:82 EXCEPTION: Error: Uncaught (in promise): No provider for false!BrowserDomAdapter.logError @ browser_adapter.ts:82BrowserDomAdapter.logGroup @ browser_adapter.ts:93ExceptionHandler.call @ exception_handler.ts:58(anonymous function) @ application_ref.ts:374schedulerFn @ async.ts:148SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.next @ Subscriber.ts:192Subscriber._next @ Subscriber.ts:133Subscriber.next @ Subscriber.ts:93Subject._finalNext @ Subject.ts:154Subject._next @ Subject.ts:144Subject.next @ Subject.ts:90EventEmitter.emit @ async.ts:133onError @ ng_zone.ts:142onHandleError @ ng_zone_impl.ts:95ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233_loop_1 @ zone.js:487drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426 browser_adapter.ts:82 STACKTRACE:BrowserDomAdapter.logError @ browser_adapter.ts:82ExceptionHandler.call @ exception_handler.ts:61(anonymous function) @ application_ref.ts:374schedulerFn @ async.ts:148SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.next @ Subscriber.ts:192Subscriber._next @ Subscriber.ts:133Subscriber.next @ Subscriber.ts:93Subject._finalNext @ Subject.ts:154Subject._next @ Subject.ts:144Subject.next @ Subject.ts:90EventEmitter.emit @ async.ts:133onError @ ng_zone.ts:142onHandleError @ ng_zone_impl.ts:95ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233_loop_1 @ zone.js:487drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426 browser_adapter.ts:82 Error: Uncaught (in promise): No provider for false! at resolvePromise (zone.js:538) at zone.js:515 at ZoneDelegate.invoke (zone.js:323) at Object.onInvoke (ng_zone_impl.ts:72) at ZoneDelegate.invoke (zone.js:322) at Zone.run (zone.js:216) at zone.js:571 at ZoneDelegate.invokeTask (zone.js:356) at Object.onInvokeTask (ng_zone_impl.ts:61) at ZoneDelegate.invokeTask (zone.js:355)

也是圖片的錯誤,因爲格式是可怕的。 Stacktrace

我不知道爲什麼會發生這種情況 - 其他人嗎?

+0

如何'tokenNotExpired()'看起來像提供? –

+0

返回true/false,沒有別的。同樣的事情發生,如果我寫canActivate:false – yusijs

回答

0

傳遞給canActivate: [!tokenNotExpired()]的值需要是提供者。 !tokenNotExpired()不是有效的提供者。

canActivate: ['tokenExpired'] 
canActivate: ['!tokenExpired'] 

,並引導或APP_ROUTER_PROVIDERS

bootstrap(AppComponent, [ 
    {provide: 'tokenExpired', useValue: (a: any, b: any) => tokenExpired()} 
    {provide: '!tokenExpired', useValue: (a: any, b: any) => !tokenExpired()} 
]); 
+0

據我所知,傳遞一個普通的false到canActivate不需要提供者?如果是這樣的話,我會喜歡一些文檔來說明它的情況。 – yusijs

+0

https://angular.io/docs/ts/latest/guide/router.html#!#can-activate-guard顯示如何提供警衛。 https://github.com/angular/angular/blob/b42411ba1f6d0f989e5fa846524d3d9e2425e834/modules/%40angular/router/test/router.spec.ts#L849顯示如何始終提供false。我寧願看到解釋說明你在問題中顯示的內容應該起作用的文檔。 –

+0

我剛剛離開這個:一個警衛的返回值控制路由器的行爲: 如果它返回true,導航過程繼續 如果它返回false,導航過程停止並且用戶保持放 – yusijs

相關問題