使用Vue开发网站之路2-多组件通信1(利用bus总线进行事件触发)
来源:互联网 发布:淘宝网商贷影响个人 编辑:程序博客网 时间:2024/06/07 04:10
我的数据一般都放到对应的单组件里,因为我开发的是web app,组件较多,如果请求的数据都放到new Vue里面的话,难免太乱。用多组件比较方便,当然,如果这个页面只有一个请求的化,可以直接把请求放到新建的Vue对象里面。
像这样:
new Vue({el:'main',//html只能读取new Vue里面的datadata:{result:''},//mounted表示result属性已经生成mounted:function(){this.result = request(); //result之前一定要添加this,指该Vue对象}//还可以放非自定义组件的方法})
result的赋值在created阶段就可以完成,vue实例已经被创建了,只不过到mounted的时候才可见,我一开始放到mounted是看到网上的做法,后来实践所得,在created已近后面都可以。
继续回到多组件通信
1 非父子之间的多组件的事件传递
这里我用的是bus总线,因为这是简单的事件传递,没有涉及从一个数据源存储
$(function() {var bus = new Vue();//中央事件总线//验证Vue.component("identifying-code",{props:["value"],template: '<div class="input_message">\ <span id="check_triget" class="check">{{RandomData}}</span><input ref="input" id="answer" v-on:input="check($event.target.value)"></input>\ </div>', data:function() { return { A: Math.round(Math.random()*9), B: Math.round(Math.random()*9) } }, created:function() { //记录当前的vueComponent对象,因为freshData事件的回调的this为vue var that = this; //自定义事件 bus.$on("freshData",function() { //重新生成验证码 //清空验证码输入框 that.A = Math.round(Math.random()*9); that.B = Math.round(Math.random()*9); that.$refs.input.value = ""; }) }, methods:{ check:function(value) {if(value == this.calculate) {this.$emit("input",true);} } }, computed: { RandomData:function() {return this.A + " + " + this.B; }, calculate: function() { return this.A + this.B; } }});new Vue({el:'header',components:{'change-lan':changelan}});/**当前页面的vue对象data包括inputUserName用户名inputPassword密码hasIndentify是否已通过验证码canSeeIndentify是否能看到验证码**/new Vue({el:"main",data:{inputUserName:"",inputPassword:"",hasIndentify:false,canSeeIndentify:true},methods:{//提交按钮的逻辑submit:function(){if(this.checkData()){//这是请求ajax,如果密码两次不成功就设置canSeeIndentify为true,hasIndentify为false显示验证码//如果没有登录成功,就要更换验证码bus.$emit("freshData");}},//提交数据时,对数据验证checkData:function() {//如果inputUserName不为空,inputPassword也不为空,而且已通过验证码if(this.inputUserName.trim() !="" && this.inputPassword.trim() !="" && this.hasIndentify){return true;}else {return false;}},//注册按钮逻辑register:function() {location.href = "../html/register.html";}}});})这里的话主要业务场景是登陆没成功,刷新校验码,这个检验码的生成过程不用管,因为是要跟服务端配合的,然后我并没有服务端,就自己做了一个随机的加法公式。这里主要是用到
bus.$emit("freshData");
跟
bus.$on("freshData",function() { //重新生成验证码 //清空验证码输入框 that.A = Math.round(Math.random()*9); that.B = Math.round(Math.random()*9); that.$refs.input.value = ""; })给验证框绑定freshData事件,再在其他地方调用bus.$emit("freshData");触发事件。
0 0
- 使用Vue开发网站之路2-多组件通信1(利用bus总线进行事件触发)
- 使用Vue开发网站之路2-多组件通信2(利用Vuex进行数据传递)
- 使用Vue开发网站之路2-多组件通信3(父子间通信,组件与vue通信)
- vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例
- 使用bus实现Vue组件间通信
- vue-bus非父子组件之间触发事件
- 使用Vue开发网站之路1-单个组件的开发
- 利用RxJava实现的事件总线(Event Bus)
- vue 兄弟组件之间事件触发
- 事件总线(Event Bus)知多少
- OttO-bus 事件总线
- Vue全局组件开发,Vue.use(xxx)一次引入,全局使用 【Vue 非父子组件通信】
- vue中的event bus非父子组件通信
- vue中的event bus非父子组件通信
- vue父组件点击触发子组件事件
- vue---vue中如何自定义事件?子组件事件如何向上触发父组件事件?
- Vue之模态框确认组件---使用$emit触发父组件的methods
- EventBus使用详解-2-用RxJava实现事件总线(Event Bus)
- 中断处理函数的注意事项
- 文本界面的输入输出
- LeetCode 343. Integer Break
- 链接、装载与库——目标文件(3)
- 毕业设计那点事 — 源码安装PHP7
- 使用Vue开发网站之路2-多组件通信1(利用bus总线进行事件触发)
- 3、JAVA软件及工具下载--后续更新
- ACM解题的取巧的小办法
- 微波链路之视距传输
- 计算机存储计量单位
- javaweb 基础(2)—— cookie
- The Tourist Guide
- cgroup与dpdk启动
- uva490 Rotating Sentences