Angular 角度服务更改字段值

Angular 角度服务更改字段值,angular,Angular,我有一个在构造函数中填充其字段值的服务。但我希望在调用服务时更新服务的字段值: service.ts: @Injectable() export class MyDefaultIntl extends OwlDateTimeIntl { rangeFromLabel = ''; constructor( private translateService: TranslationService, ) { super(); consol

我有一个在构造函数中填充其字段值的服务。但我希望在调用服务时更新服务的字段值:

service.ts:

@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您可以检查第二种情况,这可能是原因吗