在Angular 8中,当使用RxJS进行订阅时,更新后会触发subscribe。
解决方法是使用pipe
操作符和shareReplay
操作符来共享订阅的结果。
下面是一个示例代码:
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { shareReplay } from 'rxjs/operators';
@Component({
selector: 'app-example',
template: `
{{ data$ | async }}
`
})
export class ExampleComponent implements OnInit {
data$: Observable;
ngOnInit() {
this.data$ = this.getData().pipe(shareReplay(1));
}
getData(): Observable {
// 模拟异步获取数据
return new Observable(observer => {
setTimeout(() => {
observer.next('Hello World');
observer.complete();
}, 1000);
});
}
}
在这个例子中,getData
方法返回一个Observable对象,模拟一个异步获取数据的操作。在ngOnInit
生命周期钩子中,我们使用pipe
操作符和shareReplay(1)
操作符来共享订阅的结果。这样,无论在模板中使用多少次data$
,实际上只会进行一次订阅,避免了更新后多次触发subscribe。
在模板中,我们使用data$ | async
来订阅并显示数据。
这样,在Angular 8中更新后,只会触发一次订阅,而不会多次触发。