加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular:无法读取null的属性’component’

发布时间:2020-12-17 17:47:04 所属栏目:安全 来源:网络整理
导读:我有一个奇怪的问题.我有一个像这样的基本路由配置: const appRoutes: Routes = [ {path: '',redirectTo: '/search',pathMatch: 'full'},{path: 'login',component: LoginComponent },{path: 'dashboard',component: DashboardComponent,canActivate: [Only
我有一个奇怪的问题.我有一个像这样的基本路由配置:

const appRoutes: Routes = [
  {path: '',redirectTo: '/search',pathMatch: 'full'},{path: 'login',component: LoginComponent },{path: 'dashboard',component: DashboardComponent,canActivate: [OnlyLoggedInGuard]},{path: 'search',component: SearchComponent,canActivate: [OnlyLoggedInGuard]}
];

在应用HTML上,我有条件地导入路由器插座:

<div *nfIf="condition">
...
<router-outlet></router-outlet>
...
</div>
<div *nfIf="!condition">
... another dom construction
<router-outlet></router-outlet>
...
</div>

我拦截(使用HttpInterceptor)HTTP 401错误重定向到登录页面.在我的http拦截器中的某些意义上我有这样的意思:

this._router.navigate(['/login',{error:'I am an error message'}]);

当我在仪表板上并且发生401时,我正确地重定向到具有正确错误参数的登录页面.
但是,当我在登录页面上并从服务器获得401时,我遇到以下错误:

core.es5.js:1020 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'component' of null
TypeError: Cannot read property 'component' of null
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverseRoutes (router.es5.js:4343)
    at router.es5.js:4305
    at Array.forEach (<anonymous>)
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverseChildRoutes (router.es5.js:4304)
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverse (router.es5.js:4261)
    at MapSubscriber.project (router.es5.js:4100)
    at MapSubscriber.webpackJsonp.../../../../rxjs/operator/map.js.MapSubscriber._next (map.js:77)
    at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at MergeMapSubscriber.webpackJsonp.../../../../rxjs/operator/mergeMap.js.MergeMapSubscriber.notifyNext (mergeMap.js:143)
    at InnerSubscriber.webpackJsonp.../../../../rxjs/InnerSubscriber.js.InnerSubscriber._next (InnerSubscriber.js:23)
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverseRoutes (router.es5.js:4343)
    at router.es5.js:4305
    at Array.forEach (<anonymous>)
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverseChildRoutes (router.es5.js:4304)
    at PreActivation.webpackJsonp.../../../router/@angular/router.es5.js.PreActivation.traverse (router.es5.js:4261)
    at MapSubscriber.project (router.es5.js:4100)
    at MapSubscriber.webpackJsonp.../../../../rxjs/operator/map.js.MapSubscriber._next (map.js:77)
    at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at MergeMapSubscriber.webpackJsonp.../../../../rxjs/operator/mergeMap.js.MergeMapSubscriber.notifyNext (mergeMap.js:143)
    at InnerSubscriber.webpackJsonp.../../../../rxjs/InnerSubscriber.js.InnerSubscriber._next (InnerSubscriber.js:23)
    at resolvePromise (zone.js:783)
    at resolvePromise (zone.js:754)
    at zone.js:831
    at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:424)
    at Object.onInvokeTask (core.es5.js:3881)
    at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
    at Zone.webpackJsonp.../../../../zone.js/dist/zone.js.Zone.runTask (zone.js:191)
    at drainMicroTaskQueue (zone.js:595)
    at ZoneTask.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
    at invokeTask (zone.js:1370)

解决方法

好.我设法解决了这个问题.我不完全明白,但这是我发现的:

>当路由器插座仅在应用程序HTML中包含一次时,无法读取null disapear的属性“组件”(例如:与在ng-if条件的多个分支中的每个分支中包含router-outlet相反)
>当我更改路由器插座的条件包含时

这个表格:

<div *nfIf="condition">
        <router-outlet></router-outlet>
    </div>
    <div *nfIf="!condition">
        <router-outlet></router-outlet>
    </div>

这种形式:

<div *nfIf="condition;else notcondition">
        <router-outlet></router-outlet>
    </div>
    <ng-template #notcondition>
        <router-outlet></router-outlet>
    </ng-template>

我没有问题从登录页面导航到带参数的登录页面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读