我创建了这个Plunker以显示我目前的情况。在这个例子中没有任何错误,但我希望index.html中的<h1>
也显示在应用程序中。
目前:
Hello Angular! v4.1.3
Hello World!!!
我的意图结果应该是
loading my name is Angular! v4.1.3
Hello Angular! v4.1.3
Hello World!!!
我知道我可以删除并将此<h1>
放到任何组件中,但这不是我想要的,我需要在body
中运行我的应用程序。
有没有人有任何想法?
答案 0 :(得分:1)
在此answer中,我展示了如何使用应用组件ViewContainerRef
作为渲染目标。当您在其上调用createComponent
时,新组件将在应用组件旁边创建(直接在body标签内)。
export class AppComponent implements OnInit {
constructor(
public viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver
) { }
ngOnInit() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(AppSecondaryComp);
const componentRef = this.viewContainerRef.createComponent(componentFactory);
}
}
只需确保在模块的AppSecondaryComp
数组中注册entryComponents
。
这对你有用吗? app-secondary
将在body标签内呈现。
答案 1 :(得分:0)
您可以使用<ng-content>
,但不能使用&#34; root&#34;组件(见https://github.com/angular/angular/issues/4946)。例如,如果在index.html
中,则执行
<body>
<app>Loading...</app>
</body>
app.ts
@Component({
selector: 'app',
template: `
<h2>Hello {{user.name}}</h2>
<app-secondary><h3>Some content</h3></app-secondary>
`
})
APP-secondary.ts
@Component({
selector: 'app-secondary',
template: `
<div>
<h2>Hello World!!! </h2>
<ng-content></ng-content>
</div>
`,
})
呈现的页面将是:
<body>
<app>
<h2>Hello Angular! v4.1.3</h2>
<app-secondary>
<h2>Hello World!!! </h2>
<h3>Some content</h3>
</app-secondary>
</app>
</body>
答案 2 :(得分:0)
index.html中的<body>
标记是Angular bootstraps初始组件的位置。因为它是SPA,所以基本上整个应用程序的视图都将在此<body>
标记内呈现。
您必须在src/app.ts
文件中的boostraping组件的模板中进行所需的更改。
请参阅此处的Plunker