小编acc*_*ris的帖子

类型错误:无法读取 null 的属性“canDeactivate”

我正在尝试使用 canDeactivate 路由器防护。第一次运行代码时,我传入的组件 (ClaimsViewComponent) 为空。但是在随后的运行中,代码会按预期运行。我们试图弄清楚为什么组件在第一次运行时为空。

这是 canDeactivate 守卫代码:

@Injectable()
export class ConfirmDeactivateGuard implements 
CanDeactivate<ClaimsViewComponent> {
  canDeactivate(target: ClaimsViewComponent): boolean {

      if (target.canDeactivate()) {
          return window.confirm('Do you really want to cancel?');
      }

      return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是路由模块代码:

const routes: Routes = [
{ path: ':type', component: ClaimsViewComponent, canDeactivate: 
[ConfirmDeactivateGuard] }
];

@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
Run Code Online (Sandbox Code Playgroud)

这是完整的错误堆栈:

TypeError: Cannot read property 'canDeactivate' of null
    at ConfirmDeactivateGuard.canDeactivate (confirm-deactivate-guard.ts:16)
    at MergeMapSubscriber.eval [as project] (router.js:3933)
    at MergeMapSubscriber._tryNext (mergeMap.js:128)
    at MergeMapSubscriber._next (mergeMap.js:118)
    at MergeMapSubscriber.Subscriber.next (Subscriber.js:95) …
Run Code Online (Sandbox Code Playgroud)

angular angular-router-guards angular-router

4
推荐指数
2
解决办法
3492
查看次数