Vue.js 如何在Rxjs中从多个事件中进行观察?
你好。我是Rxjs的新手。我不知道如何合并来自不同事件的可观测数据。我将Rxjs与Vue.js集成Vue.js 如何在Rxjs中从多个事件中进行观察?,vue.js,rxjs,observable,Vue.js,Rxjs,Observable,你好。我是Rxjs的新手。我不知道如何合并来自不同事件的可观测数据。我将Rxjs与Vue.js集成 export default { name: 'useraside', data: function () { return { searchKey: '', isPublic: true } }, components: { User }, subscriptions () { return { // t
export default {
name: 'useraside',
data: function () {
return {
searchKey: '',
isPublic: true
}
},
components: {
User
},
subscriptions () {
return {
// this is the example in RxJS's readme.
raps: this.$watchAsObservable('searchKey')
.pluck('newValue')
// .filter(text => text.length > 1)
.debounceTime(500)
.distinctUntilChanged()
.switchMap(terms => fetchRaps(terms, this.userdata._id, this.isPublic))
.map(formatResult)
}
}
}
现在事件来自searchKey的更改,现在我想订阅相同的可观测值,当isPublic值更改时。
所以我想在searchKey更改或iPublic更改时获得RAP。
谢谢。您可以使用
合并
操作符,并在开关映射
中继续使用this.isPublic
,正如Maxime在评论中所建议的那样
但是我更愿意使用一个很好的纯数据流,在这里,您可以侦听这两个值并在处理程序中使用它们。差不多
Rx.Observable.combineLatest(
this.$watchAsObservable('searchKey').pluck('newValue'),
this.$watchAsObservable('isPublic').pluch('newValue'),
([searchKey, isPublic]) => ({ searchKey, isPublic })
)
.dedounceTime(500)
.distinctUntilChanged()
.switchMap(({ searchTerm, isPublic }) => fetchRaps(searchTerm, this.userdata._id, isPublic))
或者,您可以将初始数据结构更改为以下内容:
data: function () {
return {
searchConfig: {
searchKey: '',
isPublic: true
}
}
},
然后可以删除combinelatetest
,只查看searchConfig
属性
此实现的好处是您的数据流是纯的,不依赖于任何外部上下文(不需要this.isPublic
)。每个依赖项都在数据流的开头显式声明
如果您想更进一步,还可以查看
userdata
并将其显式地传递到数据流:)您可以使用merge
操作符,并在开关映射中继续使用this.isPublic
,正如Maxime在注释中所建议的那样
但是我更愿意使用一个很好的纯数据流,在这里,您可以侦听这两个值并在处理程序中使用它们。差不多
Rx.Observable.combineLatest(
this.$watchAsObservable('searchKey').pluck('newValue'),
this.$watchAsObservable('isPublic').pluch('newValue'),
([searchKey, isPublic]) => ({ searchKey, isPublic })
)
.dedounceTime(500)
.distinctUntilChanged()
.switchMap(({ searchTerm, isPublic }) => fetchRaps(searchTerm, this.userdata._id, isPublic))
或者,您可以将初始数据结构更改为以下内容:
data: function () {
return {
searchConfig: {
searchKey: '',
isPublic: true
}
}
},
然后可以删除combinelatetest
,只查看searchConfig
属性
此实现的好处是您的数据流是纯的,不依赖于任何外部上下文(不需要this.isPublic
)。每个依赖项都在数据流的开头显式声明
如果您想更进一步,还可以查看userdata
,并显式地将其向下传递到数据流:)只需使用合并操作符;)谢谢它现在正在工作(只需使用合并运算符;)谢谢它正在工作