一、各文檔介紹
1、rxjs官網
2、vue-rxjs地址
二、環境搭建
1、使用vue-cli構建一個項目
2、安裝vue-rx的依賴包
yarn add rxjsyarn add rxjs-compatyarn add vue-rx
3、在src/main.js中配置使用rxjs
// 使用vueRximport VueRx from 'vue-rx';import Rx from 'rxjs/Rx'Vue.use(VueRx, Rx);
三、沒有使用vue-rx的時候
1、關于屬性的使用
import { Observable } from 'rxjs';export default { data() { return { name: new Observable.of('張三') } }};2、關于事件的使用
import { Observable } from 'rxjs';export default { data() { return { name: new Observable.of('張三'), } }, mounted () { new Observable.fromEvent(this.$refs.btn, 'click').subscribe(e => { this.name = '哈哈'; }) }};四、結合vue-rx的使用
1、項目中集成了vue-rx的時候會在vue中新增一個鉤子函數subscriptions,和之前的data類似的使用
2、domStreams是一個數組用來存放事件
3、屬性的使用
export default { name: 'HelloWorld', data () { return { msg: 'Welcome to Your Vue.js App' } }, domStreams: ['setName$', 'resetMsg$'], subscriptions() { return { // 發送一個普通的值 name: new Observable.of('張三'), // 發送一個修改的值 age$ : Observable.of(20).map(item => item + 10), // 定義發送一個數組 arr$: new Observable.of(['第一本書', '第二本書']), // 發送一個數組 obj$: new Observable.of({ a: 'test-obj', name: '呵呵' }), // 發送一個promise函數 promise$: new Observable.fromPromise(this.getPromise()), // 定時器 interval$: new Observable.interval(1000) } }, methods: { getPromise() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('promise'); }, 1000) }) } },}5、事件的使用
1.在視圖中定義事件
<button v-stream:click="setName$">點擊按鈕設置值</button>
2.在domStreams中定義
domStreams: ['setName$'],
3、在subscriptions定義事件賦值給哪個變量
name$: this.setName$.map(e => 'hello'.toUpperCase()),
六、關于switchMap、concatMap、exhaustMap的使用
1、定義事件
<button class="btn" v-stream:click="getConcatMapCount$">點擊獲取concatMapCount$</button><p>{{concatMapCount$}}</p><button class="btn" v-stream:click="getSwitchMapCount$">點擊獲取switchMapCount$</button><p>{{switchMapCount$}}</p><button class="btn" v-stream:click="getExhaustMapCount$">點擊獲取exhaustMapCount$</button><p>{{exhaustMapCount$}}</p>
新聞熱點
疑難解答
圖片精選