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 相关文章推荐
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
javascript实现添加附件功能的方法
Nov 18 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
Dec 03 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
webpack打包js文件及部署的实现方法
Dec 18 Javascript
create-react-app安装出错问题解决方法
Sep 04 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
js实现网页随机验证码
Oct 19 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
Laravel 5 学习笔记
2015/03/06 PHP
javascript 写类方式之六
2009/07/05 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
玩转python爬虫之正则表达式
2016/02/17 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
小学英语听课心得体会
2016/01/14 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS