Vue基础:vue事件处理

Vue.js 提供了事件处理机制,事件监听使用v-on指令监听DOM事件来触发JavaScript代码。

通常情况下需要编写监听事件、方法事件处理器、内联处理器方法。

监听事件

监听事件直接把事件写在v-on指令中

<div id="app">
  <p>{{message}}</p>
  <button @click="message=message+'.......YanH'">欢迎</button>
 </div>
 <script type="text/javascript">
  var app1=new Vue({
   el:"#app",
   data:{
    message:'welcome'
   }   
  })
 </script>

在这里插入图片描述

方法事件处理器

使 v-on 接收一个定义的方法来调用。

<div id="app">
  <p>{{message}}</p>
  <button @click="com">欢迎</button>
 </div>
 <script type="text/javascript">
  var app1=new Vue({
   el:"#app",
   data:{
    message:'welcome'
   },
   methods:{
   com:function(){
    alert("computer!");
   }
   }
  })
 </script>

在这里插入图片描述

内联事件处理器

如果需要传递参数,就需要内联JavaScript 语句。这种方式称为内联事件处理器。

<div id="app">
  <button @click="one_say('welcome two')">欢迎</button>
  <br />
  <p>{{one}}</p>
  <br/>
  <p>{{two}}</p>
 </div>
 <script type="text/javascript">
  var app1=new Vue({
   el:"#app",
   data:{
    one:'',
    two:''
   },
   methods:{
   one_say:function(message){
    app1.one=message;
   },
   two_say:function(message){
    app1.two=message;
   }
   }
  })
 </script>

在这里插入图片描述

在内联语句处理器中可以用特殊的变量 $event 把它传入方法,以此来访问原生的 DOM 事件。

<button v-on:click="funName(vue,$enent)">点击</button>
......
var app1=new Vue({
   el:"#app",
   methods:{
    funName:function(msg,event){
     event.preventDefault();
    }
   }
  })

事件修饰符

.stop

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

.prevent

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

.capture

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

.self

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

注意:

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self会阻止所有的点击,而v-on:click.self.prevent 只会阻止对元素自身的点击。

.once

<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>

.passive

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

注意:

不要把 .passive.prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。

按键修饰符

<!-- 只有在 `key``Enter` 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<input v-on:keyup.page-down="onPageDown">

按键码

keyCode 的事件用法已经被废弃了并可能不会被最新的浏览器支持。

系统修饰键

在 Vue2.1.0 版本中增加一些修饰键。这些键实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。修饰键如下:

  • .ctrl

  • .alt

  • .hift

  • .meta

注意:
在 Mac 系统键盘上,meta对应 command 键 (⌘)。在 Windows 系统键盘meta 对应 Windows 徽标键 (⊞)。在 Sun 操作系统键盘上,meta对应实心宝石键 (◆)。在其他特定键盘上,尤其在 MIT 和 Lisp 机器的键盘、以及其后继产品,比如 Knight 键盘、space-cadet 键盘,meta 被标记为“META”。在 Symbolics 键盘上,meta 被标记为“META”或者“Meta”。

.exact 修饰符

.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件

<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>
<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>

鼠标按钮修饰

.left

.right

.middle

vue.js官网文档:https://cn.vuejs.org/v2/guide/events.html

发布了137 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_40119412/article/details/104277926