首页 > 解决方案 > Angular 服务更改字段值

问题描述

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

服务.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;
        });
    }
}

在我的 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值稍后在应用程序中不会更改。

有没有办法在服务构建后的后期更改字段值?

或者有什么办法可以破坏服务并重建它?

我在提供者提供部分添加了服务,而不是组件的提供者部分。这会带来什么改变吗?

标签: angular

解决方案


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;
        });

推荐阅读