vue-事件


title: vue-事件处理
date: 2017-03-23

  • vue
  • 事件

本文介绍vue组件的事件处理,并通过示例模拟vue对原生事件的封装。

vue-事件处理

vue事件处理

此处不再赘述,直接看官方文档。

vue事件处理器

组件事件处理

在使用自定义组件的时候,.stop .prevent等方法均不起作用并报错

Cannot read property 'stopPropagation' of undefined

经分析,在自定义组件的时候,通过vm.$emit('eventName')方法发布事件时,没有将“事件对象”发布出去,导致在外部监听该事件的时候得不到该对象而报错。

正确的做法是在自定义组件的时候,发布事件的同时将“事件对象”同时发布出去,如:vm.$emit('eventName',event,someOtherArgs)

methods: {  
   btnClick(event) {  
        this.$emit('click',event);  
   }  
}  

模拟事件封装

vue事件处理官方文档中提到“有时也需要在内联语句处理器中访问原生 DOM 事件。可以用特殊变量 event 把它传入方法”(经测试,event的位置可以随便放置),说明vue在原生事件处理的基础上对“事件参数”做了封装。考虑最简单的情况模拟vue封装参数的代码:


function customEventHandler(arguments, callback, originEventName, originEventObject){  // arguments ---- arg1,arg2,$event,args3  

    let arr =  Array.prototype.slice.call(arguments);
    let index = arr.findIndex(function(arg){   
        return '$event' === arg;
    })  

    // 将$event替换为原生的html事件对象  
    if(index != -1){
        arr[index] = originEventObject;
    }
    
    // 注册原生事件  
    document.addEventListener(originEventName,function(){
        callback(...arr);
    });
}


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看到同事写的代码,「@submit.native.prevent」一下子抓不到含义,发现 Vue 在 2.0 以后...
    马文Marvin阅读 883评论 0 0
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,096评论 0 29
  • 1.事件处理: 这个param可以是javascript代码,可以是方法名,可以是调用js方法(可传值)。 1)监...
    廖马儿阅读 1,925评论 0 0
  • 自从建了柳河六港姐妹群后,姐妹们轮流做东相聚好多次了。大家聚在一起,聊聊家常,忆忆往事,KK歌,甚是开心。 ...
    81d1aa263da清风阅读 845评论 8 2
  • Sir最近又挖到宝。 特别适合送给你,度过一个羞羞的周一夜晚。 一部成人!!!……动画片。 (据说汁源很难找) 先...
    Sir电影阅读 19,214评论 4 17