Dan*_*l B 33 angular angular-router
我有一个带有一个路由器插座的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>
Run Code Online (Sandbox Code Playgroud)
如果我单击演示链接,将演示演示组件,但如果我单击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>
Run Code Online (Sandbox Code Playgroud)
路线定义为
export const router: Routes = [
{ path: 'demo', component: DemoComponent, canActivate: [AuthGuard] },
{ path: 'home', component: HomeComponent, canActivate: [AuthGuard] }
]
Run Code Online (Sandbox Code Playgroud)
为什么<router-outlet>不替换组件,而是在路由之间切换时添加组件的另一个"实例"?
Dan*_*l B 53
通过使用消除方法,我发现问题的罪魁祸首是BrowserAnimations我的模块app.module.ts.通过将其从我的中删除,imports问题就消失了.我将研究创建一个Plunker来演示它.
更新: 这在Github问题中有所描述.
更新2017-12-13: 现在已经修复了此PR,修复(动画):在发生CD故障时正确恢复和清理DOM.
Tet*_*Dev 21
当组件A抛出错误时也会发生这种情况,因此当导航到组件B时,由于错误导致组件A无法销毁.这是Angular的一个错误.在他们修复之前,找到抛出错误的原因并修复它.检查您的开发工具控制台.
小智 6
我有一个非常类似的问题,也使用Firebase.
但是,我发现问题来自我的一个组件中的错误,与我的路由无关.其中一个组件引用了"FormsArray",它没有被使用和格式错误.它在devtools控制台中引发了错误,但我没想到在那里检查,因为一切都编译得很好.
不确定这是否会对任何人有所帮助.
| 归档时间: |
|
| 查看次数: |
16798 次 |
| 最近记录: |