vue——@click的事件命令以及修饰符

1、@click.stop  阻止事件冒泡

//只弹出“noclick”
<div id="app"> <div v-on:click="dodo"> <button v-on:click.stop="doThis">阻止单击事件继续传播</button> </div> </div> <script>
        var app = new Vue({
            el: "#app",
            data: {
                name: "Vue.js"
            },
            methods: {
                doThis: function () {
                    alert("noclick");
                },
                dodo: function () {
                    alert("dodo");
                }
            }
        });
    </script>

2、@click.prevent  阻止事件的默认行为 (提交事件不再重载页面)

<a href="http://www.baidu.com" @click.prevent="test1">百度一下</a>   //阻止a标签跳转,仅执行函数test1

<form  action="/xxx"   @submit.prevent="test2">   //阻止表单提交,仅执行函数test2

         <input type="submit" value="注册">
</form>

//有时右键点击会带出提示框,用.prevent 只会执行show2
<template>
  <div >
    <div>
      <div @contextmenu.prevent="show2()">右键点击我呀</div>
    </div>
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      hide : true
    }
  },
  methods:{
    show2: function (ev1) {
      alert(2);
    }
  }
}
</script>

3、@click.capture   优先触发

//添加事件监听器时使用事件捕获模式 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
<div id="app" v-on:click="show">
            1
            <div id="app2" v-on:click.capture="show2">
                2
                <div id="app3" v-on:click="show3">3</div>
            </div>
        </div>
        <script type="text/javascript">
        var vm=new Vue({
            el:"#app",
            data:{
                
            },
            methods:{
                show:function(){
                    console.log("这是app的方法")
                },
                show2:function(){
                    console.log("这是app2的方法")
                },
                show3:function(){
                    console.log("这是app3的方法")
                }
            }
        })
    </script>
//此处的代码因为div2有capture关键字,所以此时冒泡的顺序发生了改变
    //正常情况下:
        //点击div3一层一层冒泡,先div3=》div2=》div1
     //加了关键字之后:
         //点击div3时,先div2=》div3=》div1

4、@click.self    只有自己能触发,子元素无法触发

(1)v-on:click.prevent.self 会阻止所有的点击

 (2)v-on:click.self.prevent 只会阻止对元素自身的点击。

//此时点击a标签会依次弹出2,1,跳转。点击div标签会依次弹出3,2,1,跳转。这发生了事件冒泡。
<div id="box">
    <div @click="alert(1)">
           <a href="/#" @click="alert(2)">a标签
               <div @click="alert(3)">div标签</div>
           </a>
     </div>
</div>

//此时点击a标签会依次弹出2,1。点击div标签会依次弹出3,1。此时各位看官已经发现,a标签不仅没有冒泡,也没有跳转,这就是官网说的会阻止所有的点击。
<div @click="alert(1)">
        <a href="/#" @click.prevent.self="alert(2)">a标签
           <div @click="alert(3)">div标签</div>
        </a>
</div>

//点击div标签会依次弹出3,1,跳转。此时a标签没有响应弹框,但是发生了跳转,这就是官网说的只会阻止对元素自身的点击。
<div @click="alert(1)">
         <a href="/#" @click.self.prevent="alert(2)">a标签
             <div @click="alert(3)">div标签</div>
         </a>
</div>

5、@click.once  只能提交一次(.once 修饰符还能被用到自定义的组件事件上。)

6、@click.native

//给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用 .native 修饰符)

//等同于在自组件中:

   子组件内部处理click事件然后向外发送click事件:$emit("click".fn)

7、.passive

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<!-- 这个 .passive 修饰符尤其能够提升移动端的性能。 -->
<div v-on:scroll.passive="onScroll">...</div>

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

8、@keyup.enter //按键修饰符(按键码的别名:.enter ,.tab ,.delete ,.esc ,.space ,.up ,.down ,.left ,.right 

//按下enter时,执行方法test3

<input type="text" @keyup.enter="test3">

methods: {

      test3 (event) {
        console.log(event.keyCode)
        alert(event.target.value)
      }

}

 你还可以通过全局 config.keyCodes 对象自定义按键修饰符别名

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

9、系统修饰键(.ctrl , .alt , .shift ,.meta 

<!-- Alt + C -->
<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

10、.exact修饰符

//.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>

<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>
发布了44 篇原创文章 · 获赞 15 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Sunshine0508/article/details/90021757