Mac*_*c_W 3 subscribe rxjs behaviorsubject angular
我正在使用一个使用BehaviorSubject的 shareDataService,如下所示。我的问题是,每次我调用服务的next()方法时,任何其他组件中的侦听器订阅都会被多次调用,看起来它多次收到相同的消息。这是预期的行为吗?如何预防?
该服务是一个单身人士。我不会多次调用changeMessage
@Injectable()
export class ShareDataService {
messageSource = new BehaviorSubject(someData);
currentMessage: Observable = this.messageSource.asObservable();
changeMessage(message) {
this.messageSource.next(message);
}
}
Run Code Online (Sandbox Code Playgroud)
组件中的订阅
ngDoCheck() {
this.shareDataService.currentMessage
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((message) => {
//Do stuff
}
});
}
Run Code Online (Sandbox Code Playgroud)
每次ngDoCheck()调用都会添加一个新订阅。尝试使用first()只获取一次值,然后自动取消订阅。
ngDoCheck() {
this.shareDataService.currentMessage
.pipe(first())
.subscribe((message) => {
// Do stuff
}
});
}
Run Code Online (Sandbox Code Playgroud)
下次ngDoCheck触发时,它会添加另一个一次性订阅。
如果您订阅的唯一目的是获取更改检测的当前值,您还可以向 ShareDataService 添加一个简单的 get() 函数以仅返回其当前值。
get() {
return this.messageSource.getValue();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8463 次 |
| 最近记录: |