angular - 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
值稍后在应用程序中不会更改。
有没有办法在服务构建后的后期更改字段值?
或者有什么办法可以破坏服务并重建它?
我在提供者提供部分添加了服务,而不是组件的提供者部分。这会带来什么改变吗?
解决方案
您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;
});
推荐阅读
- node.js - TypeORM/Express 路由器 API 在 POST 请求上响应 404
- php - 如何使用 laravel 将多维数组传递给 API
- python - Flask WTF Selectfield choices not being displayed properly while fetching from mysql
- javascript - Password security React.js
- odoo - Odoo 自定义字段到看板分组阶段列
- java - Use springdoc in Spring MVC project with custom message converters
- java - how to write onclick method to call activity from other activity?
- sql - 如何使用sql删除不是最新的产品?
- python - python 3.6中pandas的未来注释错误
- php - 多维数组比较并创建新数组