在Angular中,可以使用动态模块提供者来动态加载和注入模块提供者。以下是一个示例解决方法:
import { InjectionToken, NgModule, Optional, SkipSelf } from '@angular/core';
export const DYNAMIC_MODULE_PROVIDERS = new InjectionToken('Dynamic Module Providers');
@NgModule({})
export class DynamicModule {
constructor(@Optional() @SkipSelf() parentModule: DynamicModule,
@Optional() private dynamicProviders: any) {
if (parentModule) {
throw new Error('DynamicModule is already loaded. Import it in the AppModule only');
}
}
static withProviders(providers: any) {
return {
ngModule: DynamicModule,
providers: [
{ provide: DYNAMIC_MODULE_PROVIDERS, useValue: providers },
],
};
}
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { DynamicModule } from './dynamic.module';
@NgModule({
imports: [
BrowserModule,
DynamicModule.withProviders([
// 动态模块提供者
MyDynamicProvider,
]),
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
import { Component, Inject } from '@angular/core';
import { DYNAMIC_MODULE_PROVIDERS } from './dynamic.module';
@Component({
selector: 'app-my-component',
template: `
{{ provider.name }}
`,
})
export class MyComponent {
constructor(@Inject(DYNAMIC_MODULE_PROVIDERS) private dynamicProviders: any) {}
}
通过以上步骤,您可以在Angular应用中使用动态模块提供者来动态加载和注入模块提供者。请根据您的实际需求进行适当的调整。
上一篇:Angular动态模板注入