首页 > 解决方案 > 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));
}

标签: angularservicecomponents

解决方案


使用/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'

永远记得退订


推荐阅读