在 Angular 中,订阅 Observable 可能不会多次触发,即使数据是相同的。这是因为 Observable 发出的值被认为是相同的对象,即使它们具有相同的值和类型,也因此不会触发新的变化检测。 解决该问题的方法是使用 RxJS 操作符 distinctUntilChanged() 来过滤掉已经被发出过的相同值的 Observable。 示例代码如下:
import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { distinctUntilChanged } from 'rxjs/operators';
@Component({
selector: 'app-subscribe-example',
template: Current Value: {{value}}
})
export class SubscribeExampleComponent implements OnInit {
title = 'Angular Subscription Example';
value$: Observable{{title}}
ngOnInit(): void { this.value$ = this.getData(); this.value$.pipe(distinctUntilChanged()) .subscribe(value => { console.log('Value changed to:', value); this.value = value; }); }
private getData(): Observable