vue event 自定义事件

news/2024/7/9 23:57:18 标签: vue

子组件要把数据传递给父级 依靠自定义事件

 

自定义事件

 监听$on(eventName)

   触发$emit(eventName)

基本使用方法如下

使用app.$on('text',function(){})来自定义一个事件,实例中我使用click点击事件来触发addn 中的 app.$emit('text')给事件传递参数'hi';

app.$on监听到text 执行打印  value

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>  
        <div id="app">  
            <div @click="addn">{{pn}}</div>  
        </div>  
    </body>  
    <script>  
        var app=new Vue({  
            el:"#app",  
            data:{  
                pn:10  
            },  
            methods:{  
                addn:function(){  
                     this.pn+=1;  
                      this.$emit('text','hi');  
                    }  
  
            }  
        });  
        app.$on('text',function(value){  
                        console.log(value);  
                    })  
  

    </script>  

 

给予这个机制 父级组件就可以将父级组件的信息传递给自己组件

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>  
        <div id="app">  
            <div @click="addn">{{pn}}</div>  
            <zhe></zhe>  
        </div>  
    </body>  
    <script>  
    Vue.component('zhe',{  
            template:'<div v-on:click="myevent">{{mes}}</div>',  
            data:function(){  
                return {mes:1}  
            },  
            methods:{  
                myevent:function(){  
                    this.mes+=1;  
                    app.$emit('example','zhe')  
                }  
            }  
        });  
        var app=new Vue({  
            el:"#app",  
            data:{  
                pn:10  
            },  
            methods:{  
                addn:function(){  
                     this.pn+=1;  
                      this.$emit('example','hi');  
                    }  
            }  
        });  
        app.$on('example',function(value){  
                        console.log(value);  
                    })  
  

    </script>  

 

上图为先点击<zhe></zhe>,在点击<div @click="addn">{{pn}}</div>执行结果

这就实现了父级组件监听子级事件,通过事件可以将父级的数据传递给子集

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>  
        <div id="app">  
            <div @click="addn">{{pn}}</div>  
            <zhe @myevent="addn(111)"></zhe>  
            <zhe></zhe>  
        </div>  
    </body>  
    <script>  
    Vue.component('zhe',{  
            template:'<div v-on:click="myevent">{{mes}}</div>',  
            data:function(){  
                return {mes:1}  
            },  
            methods:{  
                myevent:function(){  
                    this.mes+=1;  
                    this.$emit('myevent')  
                }  
            }  
        });  
        var app=new Vue({  
            el:"#app",  
            data:{  
                pn:10  
            },  
            methods:{  
                addn:function(value){  
                     this.pn+=1;  
                     console.log(value);  
                      this.$emit('example','hi');  
                    }  
            }  
        });  
        app.$on('example',function(value){  
                        console.log(value);  
                    })  
  

    </script>  

$on(eventName)$emit(eventName)配合使用时,须注意的是vue的事件运行类似浏览器的事件运行机制

所有从可以使用浏览器的类似事件机制

通过将子级组件的触发函数绑定到父级的事件上

<zhe @myevent="addn(111)"></zhe>  可以理解为触 发父级组件事件的时候绑定了子集的方法函数addn()

换成你熟悉的事件就是<div  v-on:click="addn(111)"></div> ;

但是触发myevent 是<div v-on:click="myevent">{{mes}}</div>的click myevent方法中触发

 


http://www.niftyadmin.cn/n/1251949.html

相关文章

Java中的String为什么是不可变的?(转载)

转载大佬文章Java中的String为什么是不可变的&#xff1f; 什么是不可变对象&#xff1f; 众所周知&#xff0c; 在Java中&#xff0c; String类是不可变的。那么到底什么是不可变的对象呢&#xff1f; 可以这样认为&#xff1a;如果一个对象&#xff0c;在它创建完成之后&…

There is a cycle in the hierarchy解决办法

There is a cycle in the hierarchy解决办法&#xff1a; 错误原因&#xff1a;将对象转换为json串时的错误&#xff0c;可能原因是存在级联&#xff08;及树结构&#xff09;或者对象间的互相调用&#xff0c;进入了死循环&#xff0c;有些项目会经常遇到&#xff1b; 解决方…

gradle安装

首先去官网https://gradle.org下载&#xff1b; 解压后&#xff1a; 复制路径&#xff1a; 配置系统环境变量&#xff1a; 编辑path&#xff0c;新建%GRADLE_HOME%\bin 注意&#xff1a;安装这个要有java环境&#xff1b; 验证是否安装好 gradle -v 完成&#xff0c;ok

原创 自学javase回顾(7/10)

1、Array数组 2、String类&#xff08;字符串&#xff09; 3、 Integer包装类&#xff08;Number类&#xff09; 4、 Date日期类 5、Math数学类和Random类 1、Array数组&#xff1a; 一、数组基本概念&#xff1f; 1、数组这个容器本身属于引用数据类型&#xff0c; 数组…

igraph 算网络指标_DeepGCN—深度图卷积神经网络

DeepGCN: Can GCNs Go as Deep as CNNs?paper链接&#xff1a;https://arxiv.org/abs/1904.03751代码链接&#xff1a;https://github.com/lightaime/deep_gcnsproject: https://www.deepgcns.org/1. GCN存在的问题GCN中&#xff0c;aggregate的本质其实相当于图像处理中的平滑…

Ajax原理,跨域等问题

ajax全称Asynchronous Javascript and XML。其中Asynchronous代表异步。同步于异步是描述通信模式的概念&#xff0c; 同步机制&#xff1a;发送方发生请求后&#xff0c;需要等待接收到接收方的响应后&#xff0c;才能处理其他的业务。 异步机制&#xff1a;发送方发生一个请…

电压源和电流的关联参考方向_电能简介:电流源与电压源

电气工程师通过设计电路来完成有用的任务&#xff0c;其中电压和电流由各种不同的组件控制&#xff0c;修改和利用。这些电压和电流代表能量&#xff1a;电路是一个高能系统&#xff0c;其中电压比作势能&#xff0c;电流类似于动能。除非有东西也产生电能&#xff0c;否则我们…

ajax进度控制

ajax进度控制 进度事件简述 在不懂ajax进度控制的时候&#xff0c;当看到网页中&#xff0c;别人实现的加载进度条&#xff0c;总是感觉好高达上&#xff0c;其实现其实并不是很难。首先我们需要了解其涉及到了6个进度事件。 - loadstart&#xff1a;在接收到相应的数据的第…