I'm making migration from asp.net web forms to Angular 4. I'm making it step by step. Replacing one part and placing it in production. I face a problem with loading same Angular app several times in page. For example with code
<root tag="table-ep-component" data="5800"></root>
<root tag="table-ep-component" data="3333"></root>
there is only one loaded app in the page - the first one. How can I make them work both? Any suggestions are welcome
You can use Applicationref.bootstrap
method to do it working:
abstract bootstrap<C>(
componentFactory: ComponentFactory<C>|Type<C>,
rootSelectorOrNode?: string|any): ComponentRef<C>;
As we can see this method can take rootSelectorOrNode
parameter so we can bootstrap the same component twice.
ngDoBootstrap
method on your root @NgModule
can help us to manually bootstrap our application:
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
entryComponents: [AppComponent]
})
export class MenuModule {
ngDoBootstrap(appRef: ApplicationRef) {
const rootElements = document.queryselectorAll('root');
// cast due to https://github.com/Microsoft/TypeScript/issues/4947
for (const element of rootElements as any as HTMLElement[]){
appRef.bootstrap(AppComponent, element);
}
}
}
See also:
- Angular 2 stand alone components
- Changing shared data between root modules
- Get bootstraped component