【发布时间】:2017-10-10 18:24:00
【问题描述】:
所以基本上我有一个Observable,当其中的给定属性设置为true时,我想仅订阅它。
情况是我将搜索结果存储在redux 状态,并将它用于我的快速搜索组件和完整结果组件。每次击键的快速搜索自动搜索(带去抖动)和“快速结果”显示在下拉列表中。当您按 Enter 键(或单击“搜索”按钮)时,您将被重定向到完整结果,当在完整结果中,如果用户在快速搜索中搜索新内容直到他按 Enter 键,我不想更新完整结果.所以这就是状态:
state = {
fullResults: boolean,
results: SearchResult
}
我找到了takeWhile 方法,并认为这意味着我只会在条件为真时订阅,因此尝试了这个:
search$.takeWhile((state) => state.fullResults).subscribe((state) => {
this.search = state;
})
但是,这仍然会订阅每个更改。我不确定我是否误解了takeWhile 的使用,或者我是否执行错误。如果这是预期目的,我做错了什么?如果没有,还有其他方法可以实现吗?
旁注
我正在使用@angular-redux/store,它有一个很棒的@select 装饰器,我注意到它有一个comparable 参数,这也可以用来选择性地订阅吗?
【问题讨论】:
-
创建一个新的 observable,它根据所需的属性过滤底层 observable,然后订阅它:
search$.filter(state => state.fullResults).subscribe(...。 -
@torazaburo 你介意用一个更完整的例子来回答你的意思吗?
-
当询问由您的代码引起的问题时,如果您提供人们可以用来重现问题的代码,您将获得更好的答案。尽可能少地使用仍然会产生相同问题的代码。见How to create a Minimal, Complete, and Verifiable example。
-
“基于其中的属性选择性订阅”的问题是有问题的。如果不订阅,代码无法知道其中的内容。
-
@georgeawg 因为我不确定这是否是由我的代码引起的问题(我只是问是否可能,如果可能,如何)我不认为把所有时间都花在一个更具描述性的例子是值得的。单独的案例场景应该足以回答这个问题,但我添加了一个示例以使其更容易。但可以肯定的是,我明白你的意思,并会努力改进这个例子。
标签: angular typescript redux rxjs observable