angular - Angular监听返回一些变量的函数
问题描述
所以我的服务中有一个函数返回一个值,我希望我的组件能够监听该值并在它发生变化时更新它,所以我认为订阅它是个好主意,但它不能按预期工作并且在更改时不会更新值。有不同的方法可以做到这一点吗?
ngOnInit(): void {
this.translateService.onLangChange.subscribe(() => this.getLocaleDateFormat());
}
getLocaleDateFormat(): Observable<string> {
this.dateAdapter.setLocale(Languages[this.translateService.currentLang]);
this.currLang = Languages[this.translateService.currentLang];
console.log( 'get' + this.currLang);
return of (this.currLang);
}
ngOnInit(): void {
this.localeDateAdapterService.getLocaleDateFormat().subscribe(currLang => this.currLang = currLang);
}
我不需要知道它什么时候改变,我只需要知道它改变时要更新的值。不使用计时器,也不使用 OnLangChange 作为触发器:
ngOnInit(): void {
this.translateService.onLangChange.subscribe(() => this.localeDateAdapterService.getLocaleDateFormat().subscribe(currLang => this.currLang = currLang));
}
解决方案
使用/rxjs 中的主题
// Service
language$ = new Subject<string>();
setLanguage(lang: string): void {
this.language$.next(lang);
}
// Component
this.language$.subscribe((res: string) => {
console.log(res);
});
this.languageSrv.setLanguage('en');
this.languageSrv.setLanguage('es');
this.languageSrv.setLanguage('it');
this.languageSrv.setLanguage('fr');
// 'en'
// 'es'
// 'it'
// 'fr'
永远记得退订
推荐阅读
- r - R中是否有检查r脚本或日志中是否有错误的功能?
- java - 有没有办法验证文件是否是Java中的特殊块文件?
- javascript - JavaScript 问题在对象内转换字符串(循环内)
- fullcalendar - Fullcalendar.io 按日期或扩展属性获取事件
- python - 无法使用 Scrapy 获取表数据
- r - 通过突变一些变量并保持一些变量与以前相同,将宽数据转换为 long
- python - 在不阻塞 Pygame UI 的情况下录制声音
- python-3.x - 将唯一值列表添加到现有 DataFrame 列
- laravel - 在 Laravel 7 中配置 PhpRedis
- oauth-2.0 - OAuth 令牌,限制 API 使用