一、各文档介绍
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>
新闻热点
疑难解答
图片精选