vue-rx的初步使用教程
程序员文章站
2022-06-29 22:49:24
一、各文档介绍
1、
2、
二、环境搭建
1、使用vue-cli构建一个项目
2、安装vue-rx的依赖包
yarn add rxj...
一、各文档介绍
1、
2、
二、环境搭建
1、使用vue-cli构建一个项目
2、安装vue-rx的依赖包
yarn add rxjs yarn add rxjs-compat yarn add vue-rx
3、在src/main.js中配置使用rxjs
// 使用vuerx import 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>
2、定义事件名
domstreams: ['getconcatmapcount$', 'getswitchmapcount$', 'getexhaustmapcount$'],
3、触发事件
import { observable } from 'rxjs'; export default { data() { return { count: 0, } }, domstreams: ['getconcatmapcount$', 'getswitchmapcount$', 'getexhaustmapcount$'], subscriptions() { return { // 当你连续点击按钮多次获取数据时,cancatmap会将获取到的数据按队列发出 concatmapcount$: this.getconcatmapcount$.concatmap(e => { return new observable.from(this.getcount()); }), // 当你连续点击按钮多次获取数据时,switchmap只会将最后一个点击发出的值发出,前面发出的值会被吞掉 switchmapcount$: this.getswitchmapcount$.switchmap(e => { return new observable.from(this.getcount()); }), // 当你连续点击按钮多次时,exhaustmap仅执行一次,在第一次值发出后,才可以继续点击下一次发出值 exhaustmapcount$: this.getexhaustmapcount$.exhaustmap(e => { return new observable.from(this.getcount()) }) } }, methods: { getcount() { return new promise((resolve, reject) => { this.count ++; settimeout(() => { resolve(this.count); }, 1000); }) } } };
七、事件中传递参数
1、html页面
<ul> <li v-for="(num, index) in numlist" :key="index" v-stream:click="{ subject: getnum$, data: { 'index': index, 'num': num } }">{{ num }}</li> </ul> <p>点击的数字为:{{ num$.index }}</p> <p>点击的数字下标为:{{ num$.num }}</p>
2、在vue中处理
import { observable } from 'rxjs' export default { data () { return { numlist: [1, 2, 3] } }, // v-stream事件可以统一写在这里,具体可以看vue-rx的使用 domstreams: [ 'getnum$' ], subscriptions () { return { num$: this.getnum$ // 从传入的对象中获取key为data的value,传入下一个operator .pluck('data') .map(data => data) // 因为视图引用了num$.index,所以这里要初始化num$为对象,避免报错 .startwith({}) } } }
3、输入框中获取值
<input type="text" v-stream:keyup="getinput$"> <p>value$: {{ value$ }}</p>
import { observable } from 'rxjs'; export default { domstreams: ['getinput$'], subscriptions () { return { value$: this.getinput$ // 选取e.event.target.value .pluck('event', 'target', 'value') .debouncetime(2000) // 根据value值作比较,如果和上一次一样则不发出值 .distinctuntilchanged() .map(val => { console.log(val); return val; }) } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
在Python的Flask中使用WTForms表单框架的基础教程
-
Android studio使用git代码追溯到上个文件的教程?
-
Django框架的使用教程路由请求响应的方法
-
Vue-cli配置打包文件本地使用的教程图解
-
vue devtools的安装与使用教程
-
使用google-perftools优化nginx在高并发时的性能的教程(完整版)
-
Thinkphp的volist标签嵌套循环使用教程
-
cad三维拉伸怎么用? CAD使用三维拉伸命令的详细教程
-
3DsMax快捷键怎么使用Maya模式? 设置Maya为3dmax快捷键的教程
-
在Windows上使用putty远程登录Linux服务器的简单教程