天天看點

vue 指令和修飾符指令和修飾符

指令和修飾符

v-on:

修飾符

.stop - 調用 event.stopPropagation()。
.prevent - 調用 event.preventDefault()。
.capture - 添加事件偵聽器時使用 capture 模式。
.self - 隻當事件是從偵聽器綁定的元素本身觸發時才觸發回調。
.{keyCode | keyAlias} - 隻當事件是從特定鍵觸發時才觸發回調。
.native - 監聽元件根元素的原生事件。
.once - 隻觸發一次回調。
.left - (2.2.0) 隻當點選滑鼠左鍵時觸發。
.right - (2.2.0) 隻當點選滑鼠右鍵時觸發。
.middle - (2.2.0) 隻當點選滑鼠中鍵時觸發。
.passive - (2.3.0) 以 { passive: true } 模式添加偵聽器
           
  1. .stop

    調用 event.stopPropagation()

    阻止向上冒泡

    點選子級,不會觸發父級的點選事件

    <div class="app" @click.stop></div>
    <div class="app" @click.stop="handle"></div>
               
  2. .capture

    (en:捕獲,捕捉) 即是給元素添加一個監聽器,當元素發生冒泡時,先觸發帶有該修飾符的元素。若有多個該修飾符,則由外而内觸發。

    就是誰有該事件修飾符,就先觸發誰。

  3. .self

    隻有當自身被觸發(如點選)時才會生效.(例如子元素被點選不會觸發父元素)
  4. .keyCode

    (如 .13 => .enter)
    <input @keyup.enter="handle" />
    <!-- 等同于 -->
    <input @keyup.13="handle" />
               
  5. .navive

    自定義元件直接觸發(如點選)是無效的,隻能通過子元件向父元件傳遞事件的方式,或者添加

    .native

    修飾符
    <div class="app" @click="handle">
        <!-- 子元件如果不加上 .native ,click事件無效 -->
        <custom-div @click.native="handleComponent"></custom-div>
    </div>
    <script>
        new Vue({
            el:'.app',
            components:{
                'custom-div':{
                    template:`
                        <div class="component"></div>
                    `,
                }
            },
        })
    </script>
               

v-bind

修飾符:

  1. prop - 被用于綁定 DOM 屬性 (property)。(差别在哪裡?)
  2. camel - (2.1.0+) 将 kebab-case 特性名轉換為 camelCase. (從 2.1.0 開始支援)
  3. sync (2.3.0+) 文法糖,會擴充成一個更新父元件綁定值的 v-on 偵聽器。

    .sync

    是一個文法糖,作用(雙向綁定的另一種方式)

    https://www.jianshu.com/p/6b062af8cf01

    <cpt :title.sync="title"></cpt>
    <!-- => -->
    <cpt :title="title" @update:title="(val) => title = val"></cpt>
               
    /*需要顯式觸發 update 事件*/
    this.$emit('update:foo', newValue)
               

v-model

https://www.jianshu.com/p/3dbbbc7a259c

修飾符:

  1. lazy - 取代 input 監聽 change 事件
    <!-- 預設的v-model是沒輸入一個字元自動更新一次msg -->
    <!-- .lazy => 當 input 失去焦點或者按下enter鍵後才更新msg -->
    <input type="text" v-model.lazy="msg">
               
  2. number - 輸入字元串轉為數字
  3. trim - 輸入首尾空格過濾