Javascript RXJS-如果某个可观测值满足特定条件,则执行函数
我已经建立了一个搜索字段与自动完成。我在听一个可观察的东西,它可以检测文本字段的变化Javascript RXJS-如果某个可观测值满足特定条件,则执行函数,javascript,angular,reactive-programming,rxjs,Javascript,Angular,Reactive Programming,Rxjs,我已经建立了一个搜索字段与自动完成。我在听一个可观察的东西,它可以检测文本字段的变化 this.term.valueChanges .debounceTime(300) .distinctUntilChanged() .filter(query=>query.toString().length>1) .subscribe(query => { //Execute search function
this.term.valueChanges
.debounceTime(300)
.distinctUntilChanged()
.filter(query=>query.toString().length>1)
.subscribe(query => {
//Execute search function and populate dropdown menu
})
当用户搜索字符串时,下拉式自动完成列表将填充建议。如果用户随后删除搜索字符串,我希望删除下拉列表。如果从可观察流生成的值满足特定条件,是否有RxJS函数可以在订阅之前执行函数 试试这样的方法:
this.term.valueChanges
.debounce(100)
.distinctUntilChanged()
.do(() => /* close list here */)
.where(val => val.length > 1)
.select(query => ({
query: query,
completions: completions
.filter(w => w.indexOf(query.toLowerCase()) !== -1)
}))
.subscribe(r => {
/*
* r.query contains the current search word
* r.completions contain the completions for that word
*/
});
在上使用基本示例尝试以下操作:
this.term.valueChanges
.debounce(100)
.distinctUntilChanged()
.do(() => /* close list here */)
.where(val => val.length > 1)
.select(query => ({
query: query,
completions: completions
.filter(w => w.indexOf(query.toLowerCase()) !== -1)
}))
.subscribe(r => {
/*
* r.query contains the current search word
* r.completions contain the completions for that word
*/
});
在上运行基本示例,您还可以将筛选器移动到订阅中,并在订阅中使用控制流。如果
不止一个字符
执行常规操作,如果没有字符(搜索字符串的擦除),则执行其他操作。看起来是最简单的解决方案,但不是更易于维护的。这是我到目前为止所做的,但我认为使用众多rxjs方法中的一种可能存在一个更优雅的解决方案。不过,你的问题似乎框架不好。订阅只发生一次,搜索字符串的擦除可以发生任意次数。因此,即使存在这样一个Rxjs操作符,它也不会帮助您。最后,您需要的是以可维护的方式将控制流添加到数据流中。以MVI为线索,我将使用一个事件->意图->动作
数据流,有两个意图:erasal
,更新的搜索
,以及相应的动作:获取建议
,删除下拉列表
,然后订阅它。控制流是通过您使用的运算符内部的正常if
添加的。您还可以将筛选器移动到订阅中,并在订阅中使用控制流。如果不止一个字符
执行常规操作,如果没有字符(搜索字符串的擦除),则执行其他操作。看起来是最简单的解决方案,但不是更易于维护的。这是我到目前为止所做的,但我认为使用众多rxjs方法中的一种可能存在一个更优雅的解决方案。不过,你的问题似乎框架不好。订阅只发生一次,搜索字符串的擦除可以发生任意次数。因此,即使存在这样一个Rxjs操作符,它也不会帮助您。最后,您需要的是以可维护的方式将控制流添加到数据流中。以MVI为线索,我将使用一个事件->意图->动作
数据流,有两个意图:erasal
,更新的搜索
,以及相应的动作:获取建议
,删除下拉列表
,然后订阅它。控制流是通过您使用的运算符内部的正常if
添加的。