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实现图片广告轮换效果代码
Jul 07 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
Aug 09 Javascript
复选框全选与全不选操作实现思路
Aug 18 Javascript
实现只能输入数字的input不用replace方法
Sep 12 Javascript
require.js的用法详解
Oct 20 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
Nov 02 Javascript
纯javascript响应式树形菜单效果
Nov 10 Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
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
php adodb分页实现代码
2009/03/19 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
php下载文件的代码示例
2012/06/29 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
javascript动态控制服务器控件实例
2014/09/05 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Django框架 querySet功能解析
2019/09/04 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
中文专业毕业生自荐信
2013/10/28 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
红白喜事主持词
2015/07/06 职场文书
月考总结与反思
2015/10/22 职场文书
Python实现位图分割的效果
2021/11/20 Python
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python