vue中$emit与$on

  var Event = new Vue();      相当于又new了一个vue实例,Event中含有vue的全部方法;

  Event.$emit(‘msg‘,this.msg);      发送数据,第一个参数是发送数据的名称,接收时还用这个名字接收,第二个参数是这个数据现在的位置;

  Event.$on(‘msg‘,function(msg){  接收数据,第一个参数是数据的名字,与发送时的名字对应,第二个参数是一个方法,要对数据的操作

    /这里是对数据的操作

  })

例:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>孙三峰--博客园</title>
 6         <script type="text/javascript" src="js/vue2.0.3.js" ></script>
 7         <script type="text/javascript">
 8             //准备一个空的实例对象
 9             var Event = new Vue();
10             var A={
11                 template:`
12                     <div style="border: 1px solid red; margin-bottom: 10px; width: 300px;">
13                         <h4>A组件</h4>
14                         <p>{{a}}</p>
15                         <input type="button" value="把A数据给C" @click="send" />
16                     </div>
17                 `,
18                 data(){
19                     return {
20                         a:‘我是A里面的数据‘
21                     }
22                 },
23                 methods:{
24                     send(){        //A发送数据
25                         Event.$emit(‘a-msg‘,this.a);
26                     }
27                 }
28             };
29             var B={
30                 template:`
31                     <div style="border: 1px solid green; margin-bottom: 10px; width: 300px;">
32                         <h4>B组件</h4>
33                         <p>{{b}}</p>
34                         <input type="button" value="把B数据给C" @click="send" />
35                     </div>
36                 `,
37                 data(){
38                     return {
39                         b:‘我是B里面的数据‘
40                     }
41                 },
42                 methods:{
43                     send(){
44                         Event.$emit(‘b-msg‘,this.b);
45                     }
46                 }
47             };
48             var C={
49                 template:`
50                     <div style="border: 1px dotted green; margin-bottom: 10px;width: 300px;">
51                         <h4>我是C组件,我在坐等接收数据</h4>
52                         <p>{{a}}</p>
53                         <p>{{b}}</p>
54                     </div>
55                 `,
56                 data(){
57                     return{
58                         a:‘‘,
59                         b:‘‘
60                     }
61                 },
62                 mounted(){        //两种接收的方式
63                     var _this = this;
64                     Event.$on(‘a-msg‘,function(a){
65                         _this.a=a;
66                     });
67                     Event.$on(‘b-msg‘,function(b){
68                         this.b = b;
69                     }.bind(this))
70                 }
71             };
72             window.onload=function(){
73                 new Vue({
74                     el:‘#box‘,
75                     data:{
76
77                     },
78                     components:{
79                         ‘com-a‘:A,
80                         ‘com-b‘:B,
81                         ‘com-c‘:C
82                     }
83                 })
84             }
85         </script>
86     </head>
87     <body>
88         <div id="box">
89             <com-a></com-a>
90             <com-b></com-b>
91             <com-c></com-c>
92         </div>
93     </body>
94 </html>

效果图:

时间: 2024-12-18 22:42:25

vue中$emit与$on的相关文章

vue的$emit 与$on父子组件与兄弟组件的之间通信

本文主要对vue 用$emit 与 $on 来进行组件之间的数据传输. 主要的传输方式有三种: 1.父组件到子组件通信 2.子组件到父组件的通信 3.兄弟组件之间的通信 一.父组件传值给子组件 父组件给子组件传子,使用props //父组件:parent.vue <template> <div> <child :vals = "msg"></child> </div> </template> <script&

better-scroll在vue中的应用

在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 微信 -> 钱包->滴滴出行"体验效果. 什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在 这里 .better-scroll 也很强大,不仅可以做普通的滚动列表,还可以做轮播图.picker 等等. 不少同学可能用过 better-scroll,我收到反馈最多

vue的$emit

vue中 关于$emit的用法 1.父组件可以使用 props 把数据传给子组件.2.子组件可以使用 $emit 触发父组件的自定义事件. vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运行 fn: 例如:子组件: [plain] view plain copy <template> <div class="train-city"> <span @click='sel

Js跑马灯效果 &amp;&amp; 在Vue中使用

DEMO: <!DOCTYPE html><html> <head> <title>滚动播报</title> <meta charset="UTF-8"> <style> .content { height: 60px; background-color: #2c2c34; overflow: hidden; } .content ul { white-space: nowrap; } .content

vue中watch的使用

vue中watch的使用 vue中的watch是一个比较重要的概念,通过他我们可以检测data的变化,下面进行详细的介绍. watch定义方式如下: {[key: string]: string | Function | Object } 即在watch中, 键是一个字符串,它是被观测的对象. 值可以是一个字符串,这个字符串是方法名. 值还可以是一个函数,但不能使用箭头函数的形式,this会出现问题. 值也可以是一个对象,其中包含回调函数可以其他一些选项:比如是否深度遍历. 举例如下: <!DO

怎么在vue中使用less

最近使用vue2.0重构项目, 使用vue-cli脚手架构建, 采用webpack模板, 要在项目中使用less进行样式的编写 首先, 打开终端, 在当前项目目录下安装less npm install less less-loader —save 安装成功后,修改webpack.base.conf.js文件, 添加以下代码 在vue文件的style标签上加上 lang=“less”, 这样就可以使用less来编写样式了 <style lang="less"></sty

vue中 如何使用less

首先vue开发环境已经安装成功 当所有东西都 准备好之后 : 第一步: 安装less依赖,npm install less less-loader --save 第二步: 修改webpack.config.js文件,配置loader加载依赖,让其支持外部的less,在原来的代码上添加 { test: /\.less$/, loader: "style-loader!css-loader!less-loader", }, 现在基本上已经安装完成了,然后在使用的时候在style标签里加上l

H5 localstorage本地缓存数据的封装以及在vue中的使用

vue中常用的 每次增加数据   要缓存                     每次删除数据也要缓存  storage.js 文件 然后某个页面需要本地存储,就需要用 import引入:import storage from './storage.js' App.vue页面: <template> <div id="app"> <input type="text" v-model='todo' @keydown="doAdd

better-scroll在vue中的使用

一.介绍 关于better-scroll的原文详细介绍请参考,这里只做总结 黄老师的文章<当 better-scroll 遇见 Vue>的详细介绍 better-scroll的api:点击 better-scroll的滚动原理 <div class="wrapper"> <ul class="content"> <li>...</li> <li>...</li> ... </u