Vue事件处理原理及过程详解


Posted in Javascript onMarch 11, 2020

Vue事件监听的方式貌似违背了关注点分离(separation of concern)的传统理念。实际上,所有的Vue.js事件处理方法和表达式都严格绑定在当前视图的ViewModel上,它不会导致维护上的困难,使用v-on有以下好处:

1、扫一眼HTML模板便能轻松定位在JS代码里对应的方法。

2、无须在JS里手动绑定事件,ViewModel代码可以是非常纯粹的逻辑,和DOM完全解耦,更易于测试。

3、当一个ViewModel被销毁时,所有的事件处理器都会自动被删除,无须担心自己如何清理它们。

事件处理步骤

1. 绑定监视

2. 事件修饰符

3. 按键修饰符

代码如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
<!--列表过滤与排序-->
<div id="demo">
  <h2>绑定监听</h2>
  <button @click="test1">test1</button>
  <button @click="test2(123)">test2</button>
  <button @click="test3">test3</button> <!-- 无参函数,实际上是传了$event对象-->
  <button @click="test4(1234,$event)">test4</button>

  <h2>事件修饰符</h2>
  <!--存在事件冒泡的情况-->
  <h3>阻止事件冒泡</h3>
  <div style="width: 200px; height: 200px; background: red" @click="test5">
    <!--@click.stop 停止事件冒泡 -->
    <div style="width: 100px; height: 100px; background: blue" @click.stop="test6"></div>
  </div>

  <br>
  <h3>阻止事件的默认行为</h3>
  <a href="http://www.baidu.com" rel="external nofollow" @click.prevent="test7">去百度</a>


  <br>
  <h2>按键修饰符</h2>
  <!-- <input type="text" @keyup="test8">--> <!--原始写法-->
  <!--<input type="text" @keyup.13="test8">--> <!--13就是enter键的keyCode码-->
  <input type="text" @keyup.enter="test8"/>  <!--直接写名字-->

</div>
<script type="text/javascript" src="lib/vue.min.js"></script>
<script>
  new Vue({
    el: "#demo",
    methods: {
      test1(){
        alert('test1');
      },
      test2(number){
        alert(number);
      },
      test3(event){
        alert(event.target.innerHTML);
      },
      test4(number, event){
        alert(number + '----' + event.target.innerHTML);
      },
      test5(){
        alert('out')
      },
      test6(){
        alert('inner')
      },
      test7(){
//        event.preventDefault()  //原生的方式阻止事件的默认行为
        alert('点击,但是通过@click.prevent阻止事件的默认行为,不会跳转到百度去了')
      },
      test8(event){
//        原始写法;
//        if (event.keyCode === 13){ // Enter键
//          alert(event.target.value)
//        }
        alert(event.target.value)

      }

    }
  });
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 上下滚动广告
Jun 17 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
Sep 16 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
Javascript 运动中Offset的bug解决方案
Dec 24 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
JS实现颜色的10进制转化成rgba格式的方法
Sep 04 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
Angular简单验证功能示例
Dec 22 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
微信小程序时间轴实现方法示例
Jan 14 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 #Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 #Javascript
vue 移动端记录页面浏览位置的方法
Mar 11 #Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 #Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 #Javascript
jquery实现烟花效果(面向对象)
Mar 10 #jQuery
非常漂亮的js烟花效果
Mar 10 #Javascript
You might like
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
php中的常用魔术方法总结
2013/08/02 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
浅谈js中的this问题
2017/08/31 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
Python中的类与类型示例详解
2019/07/10 Python
解决python3输入的坑——input()
2020/12/05 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
教师专业自荐信
2014/05/31 职场文书
今日说法观后感
2015/06/08 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang