Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Angular2路由器附加组件而不是替换它大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有一个路由器插座的Angular2应用程序,根据侧面菜单中单击的链接显示不同的组件。

包含< router-outlet>的主要组件的标记。看起来像这样

<div *ngIf="authenticated == false">
  <app-login></app-login>
</div>
<div *ngIf="authenticated">
  <div class="page home-page">
    <header class="header">
      <app-navbar></app-navbar>
    </header>
    <div class="page-content d-flex align-items-stretch">
      <div class="sidebar-container">
        <app-sidebar-menu></app-sidebar-menu>
      </div>
      <div class="content-inner">
      <app-page-header></app-page-header>
        <div id="sub-content">
          <router-outlet></router-outlet>
        </div>
        <app-footer></app-footer>
      </div>
    </div>
  </div>
</div>

如果我单击Demo链接,将呈现演示组件,但如果我单击Home链接,则主组件将呈现在DOM中的演示组件上方。点击它们几次将产生这样的DOM

<div _ngcontent-c0="" id="sub-content">
    <router-outlet _ngcontent-c0=""></router-outlet>
  <app-home _nghost-c6="">...</app-home>
  <app-demo _nghost-c7="">...</app-demo>
  <app-home _nghost-c6="">...</app-home> <!-- Why so many here? Should be just either one <app-home> or <app-demo>  -->
  <app-demo _nghost-c7="">...</app-demo>
  <app-home _nghost-c6="">...</app-home>
  <app-demo _nghost-c7="">...</app-demo>
  <app-footer _ngcontent-c0="" _nghost-c5="">...</app-footer>
</div>

路线定义为

export const router: Routes = [
    { path: 'demo',component: DemoComponent,canActivate: [AuthGuard] },{ path: 'home',component: HomeComponent,canActivate: [AuthGuard] }
]

为什么< router-outlet>不替换组件,而是在路由之间切换时添加组件的另一个“实例”?

通过使用消除方法,我发现问题的罪魁祸首是app.module.ts中的BrowserAnimations模块。通过从我的导入中删除它,问题就消失了。我将研究创建一个Plunker来演示它。

更新:
这在Github issue中描述。

更新2017-12-13:
现在已经通过此PR,fix(animations): properly recover and cleanup DOM when CD failures occur修复了这个问题。

大佬总结

以上是大佬教程为你收集整理的Angular2路由器附加组件而不是替换它全部内容,希望文章能够帮你解决Angular2路由器附加组件而不是替换它所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: