监听事件

使用v-on监听DOM事件

<div id="test1">
    <button v-on:click="counter+=1">加一</button>
    <p>按钮被点击了{{counter}}次</p>
</div>
var test1=new Vue({
    el:'#test1',
    data:{
        counter:0
    }
})

结果:

事件处理方法

<div id="test2">
    <button v-on:click="greet">Greet</button>
</div>
var test2=new Vue({
    el:'#test2',
    data:{
        name:'vue.js'
    },
    methods:{
        greet:function(event) {
            alert('hello ' + this.name + ' !')
            if (event){
                alert(event.target.tagName)
            }
        }
    }
});

结果:

内联处理器中的方法

在内联js语句中调用方法

<div id="test3">
    <button v-on:click="say('我是第一个按钮')">按钮1</button>
    <button v-on:click="say('我是第二个按钮')">按钮2</button>
</div>
var test3=new Vue({
    el:'#test3',
    methods: {
        say:function (message) {
            alert(message)
        }
    }
});

结果:

UTOOLS1583070923282.gif

事件修饰符

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

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

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

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

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

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

按键修饰符

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

全部的按键符别名:

  • .enter
  • .tab
  • .delete
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right
  • .ctrl
  • .alt
  • .shift
  • .meta

.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
Last modification:July 12th, 2020 at 01:09 am