Angular 角度服务更改字段值
我有一个在构造函数中填充其字段值的服务。但我希望在调用服务时更新服务的字段值: service.ts:Angular 角度服务更改字段值,angular,Angular,我有一个在构造函数中填充其字段值的服务。但我希望在调用服务时更新服务的字段值: service.ts: @Injectable() export class MyDefaultIntl extends OwlDateTimeIntl { rangeFromLabel = ''; constructor( private translateService: TranslationService, ) { super(); consol
@Injectable()
export class MyDefaultIntl extends OwlDateTimeIntl {
rangeFromLabel = '';
constructor(
private translateService: TranslationService,
) {
super();
console.log('service is constructed');
this.subscribeToTranslations();
}
subscribeToTranslations(): void {
this.translateService
.translateKey('FROM_LABEL')
.subscribe(message => {
console.log('From Message:' + message);
this.rangeFromLabel = message;
});
}
}
在my module.ts中:
@NgModule({
imports: [OwlDateTimeModule,OwlNativeDateTimeModule],
exports: [OwlDateTimeModule,OwlNativeDateTimeModule],
providers: [
{provide: OwlDateTimeIntl, useClass: MyDefaultIntl},
],
})
翻译服务:
@Injectable()
export class TranslationService {
constructor(private translate: TranslateService) {
}
translateKey(key: string, param?: any){
return this.translate.get(key, param);
}
}
现在发生的情况是,构造函数只被调用一次,并且永远不会再次构造(即,它永远不会被破坏,以便可以再次构造)
因此,rangeFromLabel
值在应用程序中稍后不会更改,因为未调用服务构造函数
在构建服务后的后期阶段,是否有办法更改字段值
或者有没有办法破坏服务并重建它
我已经在提供者提供部分添加了服务,而不是组件的提供者部分。这会有任何改变吗?您的
rangeFromLabel
不依赖于构造函数调用,因为它从observable接收值,并且因为您已经在第一次调用中订阅了对象,所以它将在observable发出的每个事件上得到更改,您不需要订阅每个调用
this.translateService
.translateKey('FROM_LABEL')
.subscribe(message => {
console.log('From Message:' + message);//it will get called evrytime observable event is emitted
this.rangeFromLabel = message;
});
必须始终调用translateKey方法才能获得更新的值。我还用翻译服务的代码更新了我的问题providedIn属性将服务包含在AppModule中或仅由AppModule导入的模块中第一个是可以的,因为您没有添加providedIn您可以检查第二种情况,这可能是原因吗