Я использую Angular 5 для запуска приложения внутри решения SPFX, но мое приложение не запускает некоторые базовые угловые события, такие как onInit, или даже набор @Input не работает.
Единственный модуль и компоненты, которые работают должным образом, это те, которые запускаются app.component и app.module.Для всех остальных модулей запускается только конструктор, но все остальные события Angular Lifecycle не запускаются.
Вот мой app.webpart.ts:
export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloAngularWebPartProps> {
constructor() {
super();
}
ngElement: HTMLElement;
public render(): void {
window['webPartContext'] = this.context;
this.domElement.innerHTML = `<app-root [isOnline]='false'></app-root>`;
platformBrowserDynamic().bootstrapModuleFactory(
AppModuleNgFactory, { ngZone: 'noop' })
.catch(
err => console.log('error', err)
);
}
и мое приложение.module
@NgModule({
declarations: [
AppComponent,
],
imports: [
CoreModule,
TrackersModule,
LocalStorageModule.withConfig({
prefix: 'my-app',
storageType: 'localStorage',
}),
RouterModule.forRoot(ROUTES, { useHash: true, preloadingStrategy: PreloadAllModules })
],
providers: [
BackendRequestClass,
{
provide: APP_INITIALIZER, useFactory: (config: BackendRequestClass) => () => config.load(),
deps: [BackendRequestClass], multi: true
},
],
bootstrap: [AppComponent]
})
export class AppModule {
constructor() { }
}
Я предполагаю, что проблема связана с тем, как приложение запускается из веб-части, поэтому я попытался запустить приложение, используя boostrapModule вместо bootstrapModuleFactory.Но я даже не уверен, что это правильный способ загрузить все мои модули из app.module.
platformBrowserDynamic().bootstrapModule(AppModule, {
ngZone: 'noop'
}).catch(err => console.log(err));
Но когда я запускаю это, я получаю эту ошибку:
Отклонение обещания: для 'AppModule' не найдено метаданных NgModule.;Зона:;Задача: Promise.then;Значение: ошибка: метаданные NgModule для 'AppModule' не найдены.