Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 如何在Rxjs中从多个事件中进行观察?_Vue.js_Rxjs_Observable - Fatal编程技术网

Vue.js 如何在Rxjs中从多个事件中进行观察?

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

你好。我是Rxjs的新手。我不知道如何合并来自不同事件的可观测数据。我将Rxjs与Vue.js集成

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
,并显式地将其向下传递到数据流:)

只需使用合并操作符;)谢谢它现在正在工作(只需使用合并运算符;)谢谢它正在工作