我想在我的 Angular 库中使用
provideIn: 'root'
选项提供服务(该服务用于消费者应用程序)。但是,我也想为其提供一些配置(例如 forRoot / forChild / withConfig
模式)。
有什么办法可以实现这个目标吗?
可以通过创建注入令牌来提供配置。它将在服务中被读取。令牌本身可以通过为其提供新值或通过创建配置它的辅助函数来配置。
示例:
interface Settings {
// some settings
}
// provide default settings if necessary
const defaultSettings: Settings = {
// some settings
};
export const SERVICE_SETTINGS = new InjectionToken<Settings>('service-settings', {providedIn: 'root', factory() {
return defaultSettings
}})
@Injectable({providedIn: 'root'})
export class SomeService {
settings = inject(SERVICE_SETTINGS);
// some logic
}
3.1。您可以在 AppModule(或任何其他模块)中提供注入令牌值:
@NgModule({
providers: [
// other providers
{provide: SERVICE_SETTINGS, useValue: {someValue: 1}}
]
})
3.2。您还可以创建一个辅助函数来配置服务。在库中创建此函数并将其导出:
export function provideServiceConfiguration(settings: Settings) {
return makeEnvironmentProviders([
{ provide: SERVICE_SETTINGS, useValue: settings },
]);
}
然后将其添加到您的
AppModule
或任何其他模块或 bootstrapApplication
或子组件树中:
@NgModule({
providers: [provideServiceConfiguration(globalOptions)],
})