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 相关文章推荐
js中if语句的几种优化代码写法
Mar 12 Javascript
jquery中文乱码的多种解决方法
Jun 21 Javascript
jQuery之字体大小的设置方法
Feb 27 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
详解微信第三方小程序代开发
Jun 23 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
JavaScript中的this基本问题实例小结
Mar 09 Javascript
JavaScript逻辑运算符相关总结
Sep 04 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
chrome原生方法之数组
2011/11/30 Javascript
js加强的经典分页实例
2013/03/15 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
甜品店创业计划书
2014/08/14 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
校园运动会广播稿
2015/08/19 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js