假设我有一个行为主体,其值由具有两个属性的对象组成。有没有一种方法可以仅订阅基础值的一个属性的更改?
export interface MyObject {
property1: string,
property2: string
};
const subject = new BehaviorSubject<MyObject>({
property1: 'test',
property2: 'test'
});
subject.next({
property1: 'test',
property2: 'test2'
});
subject.subscribe(value => {
// how to only fire for changes on property2?
});
Run Code Online (Sandbox Code Playgroud)
您可以使用distinctUntilChanged运算符,并传入一个函数来描述什么算作相等。如果两个连续值相等,则第二个值将被过滤掉:
subject.pipe(
distinctUntilChanged((prev, curr) => prev.property2 === curr.property2)
).subscribe(value => {
// do stuff
})
Run Code Online (Sandbox Code Playgroud)
同样,您可以使用distinctUntilKeyChanged:
subject.pipe(
distinctUntilKeyChanged('property2')
).subscribe(value => {
// do stuff
})
Run Code Online (Sandbox Code Playgroud)
上面的例子仍然会输出整个对象。如果您只想输出属性 2,则可以映射到该属性,并再次使用 uniqueUntilChanged,尽管您不需要自定义相等函数
subject.pipe(
map(value => value.property2),
distinctUntilChanged(),
).subscribe(property2 => {
// do stuff
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |