我需要跟踪商店上最新ID的更改,因此我需要获取更改之前和更改之后的值。
this.store.select(currentSearchSelector).subscribe(search => {
this.currentSearchId = search.id;
console.log('current ' + this.currentSearchId);
// I need to detect the change on this id in the store
});
在不丢失以前的更改的情况下,关注最新的更改是什么?
例如:如果currentSearchID = 21,则更改为22,我需要检测到此更改。 在我拥有的订阅上,列表器将仅继续获取最新更改。
答案 0 :(得分:2)
谢谢您的提问!
我认为您可以使用值为2的bufferCount运算符。
它将创建一个可观察对象,该对象将仅在缓冲区已满时发出值,并以数组形式发出值。要查找更多信息,可以检查official documentation。
P.S。您的缓冲区大小应为2。
this.store.select(currentSearchSelector)
.pipe(bufferCount(2))
.subscribe(([previousSearch, currentSearch]) => {
this.currentSearchId = currentSearch.id;
console.log('current ' + this.currentSearchId);
console.log('previous ' + previousSearch.id);
});
此外,还有一个bufferCount
运算符StackBlitz
pairwise operator是bufferCount的一个更特定的版本,它只将最后两个项目一起发出,在这里可能更合适。
无论选择哪种方式,您可能还需要将其与filter operator结合使用,以检查搜索ID的更改。