• Vue--事件处理(逐个学习事件修饰符)


    • .capture
    • .self
    • .once

    主要学习这三个事件修饰符的用法先来看看capture

    capture即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。 
    就是谁有该事件修饰符,就先触发谁。 例子如下:

     1 <html>
     2   <head>
     3     <title>Vue事件修饰符 capture</title>
     4     <script src="vue.js"></script>
     5     <style type="text/css">
     6       *{
     7          text-align:center;
     8          line-height:40px;
     9          margin:0 auto;
    10       }
    11       div {
    12          100px;
    13       }
    14       #obj1 {
    15          background:deeppink;
    16       }
    17       #obj2 {
    18          background:pink;
    19       }
    20       #obj3 {
    21          background:hotpink;
    22       }
    23       #obj4 {
    24          background:#ff4225
    25       }
    26     
    27     </style>
    28   </head>
    29   <body>
    30    <div id="example">
    31       <div id="obj1" @click.capture="doSomething">
    32          obj1
    33          <div id="obj2" @click.capture="doSomething">
    34          obj2
    35            <div id="obj3" @click="doSomething">
    36              obj3
    37                <div id="obj4" @click="doSomething">
    38                obj4
    39                </div>
    40            </div>
    41          </div>
    42       </div>
    43    </div>
    44    <script>
    45     new Vue({
    46       el:"#example",
    47       data:{
    48         id:""
    49       },
    50       methods:{
    51         doSomething:function(event){
    52            this.id = event.currentTarget.id;
    53            alert(this.id);
    54         }  
    55       }
    56     })
    57    </script>
    58   </body>
    59 </html>

    浏览器打开如下:

    当点击obj4的时候 触发顺序是 obj1,obj2,obj4,obj3

    由于1,2有修饰符,故而先触发事件,然后就是4本身触发,最后冒泡事件。

    self

    self可以理解为跳过冒泡事件和捕获事件,只有直接作用在该元素上的事件才可以执行。

     1 <html>
     2   <head>
     3     <title>Vue事件修饰符 self</title>
     4     <script src="vue.js"></script>
     5     <style type="text/css">
     6       *{
     7          text-align:center;
     8          line-height:40px;
     9          margin:0 auto;
    10       }
    11       div {
    12          width:100px;
    13       }
    14       #obj1 {
    15          background:deeppink;
    16       }
    17       #obj2 {
    18          background:pink;
    19       }
    20       #obj3 {
    21          background:hotpink;
    22       }
    23       #obj4 {
    24          background:#ff4225
    25       }
    26      
    27     </style>
    28   </head>
    29   <body>
    30    <div id="example">
    31       <div id="obj1" @click="doSomething">
    32          obj1
    33          <div id="obj2" @click="doSomething">
    34          obj2
    35            <div id="obj3" @click.self="doSomething">
    36              obj3
    37                <div id="obj4" @click="doSomething">
    38                obj4
    39                </div>
    40            </div>
    41          </div>
    42       </div>
    43    </div>
    44    <script>
    45     new Vue({
    46       el:"#example",
    47       data:{
    48         id:""
    49       },
    50       methods:{
    51         doSomething:function(event){
    52            this.id = event.currentTarget.id;
    53            alert(this.id);
    54         }
    55       }
    56     })
    57    </script>
    58   </body>
    59 </html>

    上面的例子当点击obj4的时候会依次弹出  obj4,obj2,obj1 ,只有使用了事件修饰符的obj3没有弹出。只有当我们点击obj3才会触发它

    once

    这个事件修饰符让点击事件只能触发一次

     1 <html>
     2   <head>
     3     <title>Vue事件修饰符 once</title>
     4     <script src="vue.js"></script>
     5     <style type="text/css">
     6     </style>
     7   </head>
     8   <body>
     9    <div id="example">
    10       <button @click.once="clickme">点击我</button>
    11    </div>
    12    <script>
    13      new Vue({
    14        el:"#example",
    15        methods:{
    16          clickme(){
    17             alert("我被触发了");
    18          }
    19        }
    20      })
    21    </script>
    22   </body>
    23 </html>

    当点击第一次弹出 “我被触发了”第二次则不会触发点击事件也就不会弹出了

  • 相关阅读:
    【转】线程的7种状态及相互转换
    java timer 使用:
    LayoutInflater
    java中Thread与Runnable的区别
    php上传程序到服务器后出错smarty1259
    cakephp ajax
    纯真IP数据库的应用IP地址转化成十进制
    对数组里的元素进行排序
    smarty中的cache_id问题
    箴言
  • 原文地址:https://www.cnblogs.com/qjuly/p/8623841.html
Copyright © 2020-2023  润新知