我发现当bootstrap()被调用时,它会将一个类实例与 DOM 上的选择器匹配并插入一个影子 DOM。
因此,为了尝试引导同一类的两个根组件,我在每个组件上都指定了一个不同的“选择器”。
但是,虽然每个组件都使用不同的“选择器”进行引导,但如果我查看每个组件的注释元数据,它们都指向相同的 '_hostElement.nativeElement'。
前任:
以下打印显示'_hostElement.nativeElement'的注释元。
console.log(Reflect.getMetadata('annotations', AppComponent));
对于以下类声明:
export class AppComponent {
constructor(private vcRef: ViewContainerRef, private resolver: ComponentResolver) {
console.log('annotations');
console.log(Reflect.getMetadata('annotations', AppComponent));
}
}
这就是我引导每个实例的方式,以便它们具有不同的选择器:
bootstrap( Component({
selector: 'my-app-' + id,
encapsulation: ViewEncapsulation.Emulated,
template: `<p>Dynamic Component {{message}}</p>`
})(AppComponent)).then(app => {
//app['_hostElement'].nativeElement = `<div class="Ng2"><h1>Angular 2-${this.context.instanceId}</h2><my-app-${this.context.instanceId}/></div>`
console.log(app['_hostElement'].nativeElement);
console.log('Bootstrap Successful');
console.log(app);
}, err => {
console.error(err);
});
上面的引导函数返回一个 Promise,这对于两个实例都是成功的,这与人们所期望的相反。
当我检查 DOM 时,我可以看到有两个不同的“选择器”标签可以按预期标识根应用程序,但如下图所示 - 引导组件'ComponentRef_'指向相同的 '_hostElement.nativeElement'。
[这里是引导调用的 'ComponentRef_' - 两个调用都返回相同的 ComponentRef_ ][1]
如何让同一类的两个根组件很好地发挥作用?