最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 通過(guò)自定義指令回顧v-內(nèi)置指令(小結(jié))

 更新時(shí)間:2018年09月03日 14:42:47   作者:JennyTong  
這篇文章主要介紹了Vue 通過(guò)自定義指令回顧v-內(nèi)置指令(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Vue.js 的各種指令(Directives)更加方便我們?nèi)?shù)據(jù)驅(qū)動(dòng) DOM,例如 v-bind、v-on、v-model、v-if、v-for、v-once 等內(nèi)置指令,這些指令的職責(zé)就是當(dāng)表達(dá)式改變時(shí)將某些行為應(yīng)用到 DOM 上,盡量不去操作增刪改 DOM。通過(guò)了解如何去自定義指令,可以想象內(nèi)置指令是如何完成的。

內(nèi)置指令

指令名稱 描述 使用
v-model 綁定數(shù)據(jù) <\input v-model="message">
v-text 輸出文本,不能解析標(biāo)簽 <\p v-text="message"></p>
v-html 輸出文本,可解析標(biāo)簽 <\p v-html="message">/p>
v-once 只綁定一次數(shù)據(jù) <\p v-once >{{message}}</p>
v-bind 綁定屬性 <\img v-bind:src="imgurl"> 或 <\img :src="imgurl">
v-if 控制是否顯示容器 值轉(zhuǎn)為布爾為false時(shí) 注釋該容器,反之顯示 <\div v-if="true"></div>
v-show 控制是否顯容器,改變的時(shí)display:none/block <\div v-show="true"></diiv>
v-for 循環(huán)遍歷數(shù)組、對(duì)象 <\li v-for="(val,key) in arr">{{val}}</li>
v-cloak 在還沒(méi)有執(zhí)行到vue代碼的時(shí)候隱藏元素,可解決‘閃爍'問(wèn)題 <\p v-cloak>{{message}}</p>

自定義指令

在需要特殊功能時(shí),使用自定義指令對(duì) DOM 進(jìn)行底層操作

注冊(cè)

自定義指令的注冊(cè)分為全局注冊(cè)和局部注冊(cè),類似組件的注冊(cè),只是方法名為 directive,寫法如下:

// 全局注冊(cè) 自定義指令
Vue.directive(‘mydir',{
  // 指令選項(xiàng)
});
// 全局注冊(cè) 自定義指令函數(shù)
Vue.directive('mydir', function () {
 // 這里將會(huì)被 `bind` 和 `update` 調(diào)用
})
// 局部注冊(cè)(只針對(duì)組件內(nèi)元素)
export default {
  directives: {
    mydir: {
      // 指令選項(xiàng)
    }
  }
}

需要注意的是:Vue.directive( ) 注冊(cè)指令要在實(shí)例初始化 new Vue( ) 之前才能全局注冊(cè)指令。定義指令時(shí)駝峰式寫法會(huì)報(bào)錯(cuò),所以一般小寫。

指令選項(xiàng)

自定義指令的選項(xiàng)是由幾個(gè)鉤子函數(shù)(可選)組成,可以根據(jù)需求選擇不同的鉤子,例如使用全局注冊(cè)一個(gè)指令時(shí):

Vue.directive('mydir', {
 bind: function () {
  // 只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用,用于在綁定元素時(shí)執(zhí)行一次的初始化動(dòng)作。
  },
 update: function () {
  // 第一次是緊跟在 bind 之后調(diào)用,獲得的參數(shù)是綁定的初始值,
  // 之后被綁定元素所在的模板更新時(shí)調(diào)用,而不論綁定值是否變化,可以忽略不必要的模板更新。  
  }, 
 inserted: function () {
  // 被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在于 document 中)。
  },
 componentUpdated: function () {
  // 被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。
  },
 unbind: function () {
  // 只調(diào)用一次, 指令與元素解綁時(shí)調(diào)用。
  }
})

以上每個(gè)鉤子函數(shù)都有幾個(gè)參數(shù)可用:

  1. el:指令所綁定的元素,可以用來(lái)直接操作 DOM;
  2. binding:包含指令信息的一個(gè)對(duì)象;
  3. vnode:Vue 編譯的生成虛擬節(jié)點(diǎn);
  4. oldVnode:上一次的虛擬節(jié)點(diǎn),僅在update和componentUpdated鉤子函數(shù)中可用。

示例

// 一個(gè)帶自定義指令的元素
<div v-mytest:foo.m1.m2="1+1">MyDirective</div>

// 部分 JS 代碼
export default {
  directives:{
   mytest: {
    bind: function (el, binding, vnode) {
     console.log(el)
     console.log(binding)
     console.log(vnode)
    }
   }
  }
}

控制臺(tái)輸出截圖:

其中對(duì)于 binding 對(duì)象輸出的屬性有:

  1. rawName: "v-mytest:foo.m1.m2" // 自定義指令
  2. name: "mytest" // 指令名稱
  3. arg: "foo" // 指令的參數(shù)
  4. modifiers: {m1: true, m2: true} // 指令的修飾符
  5. expression: "1+1" // 指令綁定值的字符串形式
  6. value: 2 // 指令的綁定值

v-bind || : 綁定屬性

Vue 內(nèi)置指令 v-bind 用于動(dòng)態(tài)更新 HTML 元素屬性,使用 v-bind:someAttr = "someData"或者語(yǔ)法糖 :someAttr = "someData"就可以在 someData 改變時(shí)更新綁定的 someAttr 屬性。

基本用法

綁定單一的屬性值

<a :href="url" rel="external nofollow" rel="external nofollow" :id="linkID">鏈接</a>

測(cè)試 data 如下:

// js
data : {
  url: 'https://www.baidu.com/',
  linkID : 'myid'
}

元素渲染輸出:

<a  rel="external nofollow" rel="external nofollow" id="myid">鏈接</a>

對(duì)象語(yǔ)法

v-bind 最常用的是綁定 class 或 style 屬性來(lái)動(dòng)態(tài)改變樣式。例如可以給 :class 設(shè)置一個(gè)對(duì)象來(lái)動(dòng)態(tài)切換 class 的值:

<!-- class 綁定 -->
<div :class="{colorRed: isRed}"></div>

當(dāng) isRed:true 時(shí)渲染輸出:

<div class="colorRed"></div>

對(duì)象中可以傳入多個(gè)屬性值來(lái)動(dòng)態(tài)切換 class:

<!-- class 綁定,傳入多個(gè)屬性 -->
<div :class="{ classA: isA, classB: isB }">

當(dāng) isA、isB 變化時(shí) classA、classB 會(huì)動(dòng)態(tài)更新,當(dāng)都為 true 時(shí)顯然渲染結(jié)果為:

<div class="classA classB"></div>

同理對(duì)于 style 可以傳入對(duì)象屬性,并且可以使用字符串拼接:

<!-- style 綁定 -->
<div :style="{ fontSize: size + 'px' }"></div>

對(duì)于元素中的各個(gè)對(duì)象可以統(tǒng)一用 v-bind 綁定:

<!-- 綁定一個(gè)有屬性的對(duì)象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>

數(shù)組語(yǔ)法

class 可以傳入多值,給 :class 綁定一個(gè)數(shù)組就可以使用 class 列表

<div :class="[activeA, activeB]"></div>

例如當(dāng) {activeA: 'class1', activeB: 'class2'} 時(shí)渲染結(jié)果為:

<div class="class1 class2"></div>

還可以在數(shù)組語(yǔ)法中使用三元表達(dá)式切換 class,例如:

<div :class="[isA ? activeA : '', activeB]">

在 class 有多個(gè)條件時(shí)使用三元表達(dá)式比較繁瑣,可以在數(shù)組語(yǔ)法中使用對(duì)象語(yǔ)法:

<div :class="[{activeA: isA}, activeB]">

修飾符

v-bind 的修飾符很少,API 中只提供.prop、.camel和.sync,并且多用于組件,使用方式示例:

<!-- 通過(guò) prop 修飾符綁定 DOM 屬性 (property) -->
<div v-bind:text-content.prop="text"></div>

<!-- .camel 修飾符(2.1.0+)將 v-bind 屬性名稱 kebab-case 駝峰化為 camelCase -->
<svg :view-box.camel="viewBox"></svg>

<!-- .sync 修飾符(2.3.0+) 語(yǔ)法糖,會(huì)擴(kuò)展成一個(gè)更新父組件綁定值的 v-on 偵聽(tīng)器-->
<text-document v-bind:title.sync="doc.title"></text-document>
<!-- 批量綁定,將 doc 對(duì)象中的每一個(gè)屬性 (如 title) 都作獨(dú)立的 prop ,各自添加 v-on 監(jiān)聽(tīng)器-->
<text-document v-bind.sync="doc"></text-document>

v-on || @ 監(jiān)聽(tīng)事件

v-on 用于動(dòng)態(tài)綁定事件監(jiān)聽(tīng)器,使用 v-on:someEvent = "someFunction"或者語(yǔ)法糖 @someEvent = "someFunction"就可以監(jiān)聽(tīng) someEvent 進(jìn)行交互。

基本用法

@someEvent 調(diào)用的方法名后面可以不跟(),例如:

<a :href="url" rel="external nofollow" rel="external nofollow" :id="linkID">鏈接</a>
<!-- 監(jiān)聽(tīng)一個(gè)事件 -->
<button @click="changeFun">change button</button>

可以在 methods 中添加函數(shù):

// 部分 JS 代碼
methods :{
 changeFun : function () {
  this.linkID = 'changeID' // 指向當(dāng)前組件本身
 }
}

點(diǎn)擊 button 按鈕后 a 元素的 id 改變:

<a  rel="external nofollow" rel="external nofollow" id="changeID">鏈接</a>

當(dāng)然 v-on 還可以使用對(duì)象語(yǔ)法監(jiān)聽(tīng)多個(gè)事件:

<!-- v2.4.0+ -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>

對(duì)于在 HTML 元素上監(jiān)聽(tīng)的事件,當(dāng) ViewModel 銷毀時(shí),所有的事件處理器會(huì)自動(dòng)刪除,無(wú)需自己清理。

修飾符

Vue 可以將原生事件對(duì)象參數(shù) event 傳入事件方法中,并提供了特殊變量$event用來(lái)訪問(wèn)元素 DOM 事件。此外可以通過(guò)一些事件修飾符來(lái)實(shí)現(xiàn)特定的事件,如 .stop、.prevent、.capture、.once 等,常用的使用示例:

<!-- 停止單擊事件冒泡,調(diào)用 event.stopPropagation()-->
<button @click.stop="doThis"></button>

<!-- 阻止默認(rèn)行為,調(diào)用 event.preventDefault() -->
<button @submit.prevent="doThis"></button>

<!-- 添加事件偵聽(tīng)器時(shí)使用 capture 事件捕獲模式 -->
<button @click.capture="doThis"></button>

<!-- 點(diǎn)擊回調(diào)只會(huì)觸發(fā)一次 -->
<button @click.once="doThis"></button>

<!-- 只當(dāng)點(diǎn)擊鼠標(biāo)左鍵時(shí)觸發(fā)(2.2.0) -->
<button @click.left="doThis"></button>

<!-- 串聯(lián)修飾符 -->
<button @click.stop.prevent="doThis"></button>

此外,v-on 還提供按鍵修飾符來(lái)監(jiān)聽(tīng)鍵盤事件,鍵值為 .keyCode,常用有.entry、.delete、.tab、.esc、.space、.down等,如下:

<!-- 只有在 `keyCode` 是 5 時(shí)調(diào)用 `vm.submit()` -->
<input v-on:keyup.5="submit">

<!-- 為重要的 keyCode 如 enter 提供別名-->
<input v-on:keyup.enter="submit">

<!-- 縮寫語(yǔ)法 -->
<input @keyup.enter="submit">

此外還有系統(tǒng)修飾符監(jiān)聽(tīng)鍵盤事件,不同的系統(tǒng)其鍵盤/系統(tǒng)修飾符不一樣。這些按鍵修飾符可以任意組合使用。

v-if、v-show 條件渲染

條件渲染 v-if 根據(jù)表達(dá)式的值的真假條件渲染元素,在表達(dá)式為真時(shí)渲染,為假時(shí)移除。

<p v-if="status === 1">當(dāng) status 為 1 時(shí)顯示此行</p>

<p v-else-if="status === 1">當(dāng) status 為 2 時(shí)顯示此行</p>

<p v-else>其它情況默認(rèn)顯示此行</p>

v-show 也是條件渲染,但只切換元素的 CSS 屬性 display,無(wú)論條件真假都會(huì)被編譯,相比于 v-if 更適用于頻繁切換場(chǎng)景。

<p v-show="status === 1">當(dāng) status 為 1 時(shí)顯示此行</p>

當(dāng) data: {status: 2} 時(shí)隱藏,但依舊會(huì)被編譯,渲染結(jié)果為:

<p style="display: none;">當(dāng) status 為 1 時(shí)顯示此行</p>

顯然在 Vue.js 內(nèi)置的 <template> 元素上可以使用 v-if,但不能使用 v-show,可以思考下為什么。

v-for 列表渲染

列表渲染指令 v-for 常用于數(shù)組遍歷或枚舉一個(gè)對(duì)象的循環(huán)顯示,必須結(jié)合 in 使用特定語(yǔ)法 alias in expression 為當(dāng)前遍歷的元素提供別名:

<!-- 遍歷一個(gè)數(shù)組 -->
<div v-for="item in items">{{ item.text }}</div>

<!-- 提供第二個(gè)的參數(shù)為數(shù)組的索引 -->
<div v-for="(item, index) in items">{{ index }} - {{ item.text }}</div>

<!-- 遍歷對(duì)象屬性 -->
<div v-for="value in object">{{ value }}</div>

<!-- 提供第二個(gè)可選的參數(shù):對(duì)象的鍵名 -->
<div v-for="(value, key) in object">{{ key }}: {{ value }}</div>

<!-- 提供第三個(gè)的可選參數(shù):對(duì)象的索引 -->
<div v-for="(value, key, index) in object">{{ index }}. {{ key }}: {{ value }}</div>

可以用 of 替代 in 作為分隔符

當(dāng) v-for 和 v-if 在同一節(jié)點(diǎn)一起使用時(shí),v-for 的優(yōu)先級(jí)比 v-if 更高。

v-model 表單控件雙向綁定

v-model 其實(shí)也是一個(gè)特殊的語(yǔ)法糖,其實(shí)實(shí)現(xiàn)的數(shù)據(jù)雙向綁定也可用v-bind和v-on實(shí)現(xiàn),但v-model在不同表單上會(huì)有更加智能的處理。

文本框

經(jīng)典的使用案例是對(duì)<input>、<textarea>文本框的雙向數(shù)據(jù)綁定:

<!-- 輸入框 -->
<input type="text" v-model="message" placeholder="edit me">
<!-- 文本域 -->
<textarea v-model="message" placeholder="edit me"></textarea>
<!-- 實(shí)時(shí)更新 -->
<p>Message is: {{ message }}</p>

動(dòng)態(tài)選擇

對(duì)于單選按鈕,復(fù)選框及選擇框的選項(xiàng),v-model配合 Vue 實(shí)例的數(shù)據(jù)作為value屬性值實(shí)現(xiàn)不同效果,即會(huì)忽略所有表單元素的 value、checked、selected 特性的值。

<!--單選按鈕的互斥效果-->
<div id="example-radio">
 <input type="radio" id="one" value="One" v-model="picked">
 <label for="one">One</label>
 
 <input type="radio" id="two" value="Two" v-model="picked">
 <label for="two">Two</label>
 
 <!-- picked 顯示的是 value 的值 -->
 <p>Picked: {{ picked }}</p>
</div>

<!--多選按鈕-->
<div id='example-checkbox'>
 <input type="checkbox" id="one" value="One" v-model="checkedNames">
 <label for="jack">Jack</label>
 <input type="checkbox" id="two" value="Two" v-model="checkedNames">
 <label for="john">John</label>

  <!-- Checked 顯示的是 value 組成的數(shù)組 -->
 <p>Checked: {{ checkedNames }}</p>
</div>

修飾符

v-model的修飾符的使用限制在<input>、<select>、<textarea> 和組件。

  1. .lazy - 取代 input 監(jiān)聽(tīng) change 事件
  2. .number - 輸入字符串轉(zhuǎn)為數(shù)字
  3. .trim - 輸入首尾空格過(guò)濾

v-pre、v-cloak、v-once

這三個(gè)指令的共同點(diǎn)是無(wú)需表達(dá)式,用法如下:

<!-- 不顯示未編譯的標(biāo)簽直到實(shí)例初始化完 -->
<div v-cloak>{{ message }}</div>
<!-- 需要配合 CSS 隱藏樣式 [v-cloak]{ display: none;}-->

<!-- 只渲染一次,隨后的渲染將被視為靜態(tài)內(nèi)容并跳過(guò) -->
<div v-once>{{ message }}</div>

<!-- 不會(huì)被編譯,直接顯示顯示原始{{ }}標(biāo)簽 -->
<div v-pre>{{ message }}</div>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談vuex的基本用法和mapaction傳值問(wèn)題

    淺談vuex的基本用法和mapaction傳值問(wèn)題

    今天小編就為大家分享一篇淺談vuex的基本用法和mapaction傳值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Vue頁(yè)面手動(dòng)刷新,實(shí)現(xiàn)導(dǎo)航欄激活項(xiàng)還原到初始狀態(tài)

    Vue頁(yè)面手動(dòng)刷新,實(shí)現(xiàn)導(dǎo)航欄激活項(xiàng)還原到初始狀態(tài)

    這篇文章主要介紹了Vue頁(yè)面手動(dòng)刷新,實(shí)現(xiàn)導(dǎo)航欄激活項(xiàng)還原到初始狀態(tài),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue組件間通信六種方式(總結(jié)篇)

    vue組件間通信六種方式(總結(jié)篇)

    組件是 vue.js最強(qiáng)大的功能之一,而組件實(shí)例的作用域是相互獨(dú)立的,這就意味著不同組件之間的數(shù)據(jù)無(wú)法相互引用。這篇文章主要介紹了vue組件間通信六種方式,需要的朋友可以參考下
    2019-05-05
  • vue 使用插槽分發(fā)內(nèi)容操作示例【單個(gè)插槽、具名插槽、作用域插槽】

    vue 使用插槽分發(fā)內(nèi)容操作示例【單個(gè)插槽、具名插槽、作用域插槽】

    這篇文章主要介紹了vue 使用插槽分發(fā)內(nèi)容操作,結(jié)合實(shí)例形式總結(jié)分析了vue.js使用單個(gè)插槽、具名插槽、作用域插槽相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • VUE實(shí)現(xiàn)大轉(zhuǎn)盤抽獎(jiǎng)

    VUE實(shí)現(xiàn)大轉(zhuǎn)盤抽獎(jiǎng)

    營(yíng)運(yùn)三寶(九宮格、大轉(zhuǎn)盤、老虎機(jī),當(dāng)然此三寶當(dāng)然是最基礎(chǔ)的營(yíng)銷運(yùn)營(yíng)手段),本片文章聊聊大轉(zhuǎn)盤,轉(zhuǎn)盤的實(shí)現(xiàn)邏輯應(yīng)該是營(yíng)銷方案較為簡(jiǎn)單的一種了,本文將介紹如何實(shí)現(xiàn)大轉(zhuǎn)盤抽獎(jiǎng),感興趣的朋友可以參考下
    2021-05-05
  • Vue中@click.stop和@click.prevent實(shí)例詳解

    Vue中@click.stop和@click.prevent實(shí)例詳解

    當(dāng)我們使用Vue.js開(kāi)發(fā)前端應(yīng)用時(shí),經(jīng)常會(huì)在模版中使用@click指令來(lái)響應(yīng)用戶的點(diǎn)擊事件,這篇文章主要給大家介紹了關(guān)于Vue中@click.stop和@click.prevent的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • vue移動(dòng)端實(shí)現(xiàn)下拉刷新

    vue移動(dòng)端實(shí)現(xiàn)下拉刷新

    我們通過(guò)原理講解以及代碼實(shí)例給大家分享了關(guān)于VUE實(shí)現(xiàn)移動(dòng)下拉刷新的功能,有的朋友可以跟著學(xué)習(xí)下。
    2018-04-04
  • Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn)

    Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn)

    本文主要介紹了Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • axios向后臺(tái)傳遞數(shù)組作為參數(shù)的方法

    axios向后臺(tái)傳遞數(shù)組作為參數(shù)的方法

    今天小編就為大家分享一篇axios向后臺(tái)傳遞數(shù)組作為參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼

    用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼

    本篇文章主要介紹了用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12

最新評(píng)論

南召县| 潢川县| 濮阳县| 宝坻区| 遂昌县| 偃师市| 繁峙县| 大庆市| 彰武县| 慈利县| 阳西县| 黄石市| 宁明县| 双城市| 南丰县| 托克托县| 垣曲县| 兰坪| 玛曲县| 荣成市| 翼城县| 乐业县| 搜索| 临泽县| 阿合奇县| 九寨沟县| 石首市| 白河县| 浦城县| 江永县| 大田县| 仪陇县| 高青县| 南陵县| 武宣县| 拉萨市| 新田县| 绥阳县| 长白| 五大连池市| 杂多县|