BehaviourSubject上的distinctUntilChanged()不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BehaviourSubject上的distinctUntilChanged()不起作用相关的知识,希望对你有一定的参考价值。
我的package.json:
- rxjs“:”^ 5.5.6“
- @angular:“6.0.0-beta.5
searchTextValueSubject
是一个BehaviorSubject
import { debounceTime } from 'rxjs/operators';
import { distinctUntilChanged } from 'rxjs/operators';
import { pipe } from 'rxjs';
this.sharingVariableService
.searchTextValueSubject
.pipe(
distinctUntilChanged((x, y) => {
console.log(y.BarCodeS === x.BarCodeS);
console.log(y.BarCodeS);
console.log(x.BarCodeS);
return y.BarCodeS === x.BarCodeS
})
)
.subscribe((searchTextValue) => {
this.searchTextValue = searchTextValue;
this.getRessourceHardware(this.serverDataRessourceHardware._meta.max_results, this.searchTextValue);
});
结果:
是的,'d','d'
工作,听,听
预期:
错,'','d'
错,'d','来自'
我可能听不懂。你能指点我正确的方向吗?
答案
看起来你可能会向searchTextValueSubject
发送变异值。
确保你的代码没有做这样的事情......
let value = {BarCodeS: 'd'}
this.sharingVariableService.searchTextValueSubject.next(value);
value.BarCodeS = 'da'; // wrong!
this.sharingVariableService.searchTextValueSubject.next(value);
正确的方法是:
const value0 = {BarCodeS: 'd'}
this.sharingVariableService.searchTextValueSubject.next(value0);
const value1 = {...value0, BarCodeS: 'da'}; // right
this.sharingVariableService.searchTextValueSubject.next(value1);
还要注意,在第一次发射时从不调用distinctUntilChanged比较器函数(第一次发射必然是不同的)
以上是关于BehaviourSubject上的distinctUntilChanged()不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Angular2 中的共享服务和 Observable、BehaviourSubject
使用“* ngIf”的Component构造函数中的BehaviourSubject订阅会抛出“ExpressionChangedAfterItHasBeenCheckedError”