我在我的应用程序中使用过Angular4路由器。
我计划使用<router-outlet>
容器呈现子组件。
但我观察到的是,子组件会在<router-outlet>
旁边呈现。
预期:
<router-outlet>
<child-component/>
</router-outlet>
实际值:
<router-outlet></router-outlet>
<child-component/>
为什么Angular决定让这项工作成为可能的原因?
使用的路由器配置与https://angular.io/tutorial/toh-pt5
答案 0 :(得分:2)
引擎盖router-outlet
使用ViewContainerRef来操纵DOM。基本上router-outlet
元素本身就是一个视图容器:
@Directive({selector: 'router-outlet', exportAs: 'outlet'})
export class RouterOutlet implements OnDestroy, OnInit {
constructor(..., private location: ViewContainerRef, ...
attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute) {
...
this.location.insert(ref.hostView);
}
使用ViewContainerRef
是DOM should be manipulated in Angular的方式。
ViewContainerRef
更像是一个占位符,用于将组件注入DOM /呈现的位置,而不是组件的容器。
因此,在视图容器的帮助下插入的任何元素都将插入到视图容器元素旁边,而不是在中。
Here is the one启用@yurzui提到的此行为的可能原因。