欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue.js中指令Directives詳解

 更新時間:2017年03月20日 09:40:35   作者:Byronic  
這篇文章主要為大家詳細(xì)介紹了vue.js中指令Directives,具有一定的參考價值,感興趣的小伙伴們可以參考一下

想必喜歡前端開發(fā)的小伙伴們都或多或少接觸過MVVM這個概念,說起MVVM,第一時間想到的便是angularjsknockoutjs等已經(jīng)被廣泛運用的MVVM框架,之前我也沒有在這方面有很多了解,最近在做項目的過程中接觸了Vue.js,這是一個小巧精致,性能優(yōu)異的MVVM框架,可以說對初學(xué)者是比較容易入門的,該框架的英文文檔寫得很好,但是中文版訪問還不太穩(wěn)定,翻譯也有待改進(jìn),所以自己一遍學(xué)習(xí),一遍記錄自己的思考,與各位共享學(xué)習(xí)的經(jīng)驗。 

第一篇主要是想談?wù)剉ue.js中的Directives即指令,在vue.js中指令就是一個通知庫進(jìn)行某些具體的dom操作的口令,在html中表現(xiàn)為如下形式:

<element
 prefix-directiveId="[argument:] expression [| filters...]">
</element>

Directives分為1.Reactive Directives、2.Literal Directives、3.Empty Directives,下面結(jié)合具體的api闡述他們的作用:

1.Reactive Directives(響應(yīng)式指令)

Reactive Directives可以綁定在Vue實例或者在Vue實例上下文中求值的表達(dá)式上,當(dāng)綁定的對象發(fā)生改變時,指令中的update()會在下一個系統(tǒng)單位時間發(fā)生異步響應(yīng),我們來看看具體的用法:

v-text:更新元素的textContent,事實上在html中{{mustache}}形式的插入值也會被編譯為針對一個textNode的v-text指令。

v-html:更新元素的innerHTML,由于可能插入惡意代碼,使用時要注意保證來源安全。

v-show:根據(jù)綁定值的true或false來決定所在元素在網(wǎng)頁中正常顯示還是顯示為空。

v-class:這個指令有一個可選參數(shù),無參數(shù)時將綁定值(一般為class名)添加到所在元素的classlist當(dāng)中,并且一旦檢測綁定值有改動,便隨之改變classlist里對應(yīng)的class;提供參數(shù)時參數(shù)的true或false將決定綁定值(class)是否被添加到所在元素的classlist中,示例如下:

<span v-class="
 red : hasError,
 bold : isImportant,
 hidden : isHidden
"></span>

v-attr:更新所在元素的某些屬性(由參數(shù)表示)。

<canvas v-attr="width:w, height:h"></canvas>

v-style:更新所在元素的樣式,會智能添加瀏覽器供應(yīng)商前綴,方便我們書寫樣式。這個指令有一個可選參數(shù),無參數(shù)時,若綁定值為String則將綁定值設(shè)置為元素的style.cssText,若綁定值為Object則將Object中的樣式鍵值對放入元素的style object當(dāng)中;

<div v-style="myStyles"></div>
// myStyles can either be a String:
"color:red; font-weight:bold;"
// or an Object:
{
 color: 'red',
 // both camelCase and dash-case works
 fontWeight: 'bold',
 'font-size': '2em'
}

提供參數(shù)時,參數(shù)指明了css屬性的對應(yīng)值:

<div v-style="
 top: top + 'px',
 left: left + 'px',
 background-color: 'rgb(0,0,' + bg + ')'
"></div>

v-on:為元素添加并更新事件監(jiān)聽器,參數(shù)可以是一個處理函數(shù)或者一個函數(shù)語句。

<div id="demo">
 <a v-on="click: onClick">Trigger a handler</a>
 <a v-on="click: n++">Trigger an expression</a>
</div>

我們可以為處理函數(shù)提供參數(shù),其中this指的是當(dāng)前的ViewModel,如下例中通過傳入this參數(shù)改變元素的text值:

<ul id="list">
 <li v-repeat="items" v-on="click: toggle(this)">{{text}}</li>
</ul>
new Vue({
 el: '#list',
 data: {
 items: [
  { text: 'one', done: true },
  { text: 'two', done: false }
 ]
 },
 methods: {
 toggle: function (item) {
  item.done = !item.done
 }
 }
})

我們還可以傳入$event表示觸發(fā)處理函數(shù)的DOM事件,如下例傳入$event阻止事件冒泡:

<button v-on="click: submit('hello!', $event)">Submit</button>
/* ... */
{
 methods: {
 submit: function (msg, e) {
  e.stopPropagation()
 }
 }
}
/* ... */

在監(jiān)聽鍵盤事件時由于要判斷按鍵值,可以結(jié)合filter寫成如下兩種形式:

<!-- only call vm.submit() when the keyCode is 13 -->
<input v-on="keyup:submit | key 13">
<!-- same as above -->
<input v-on="keyup:submit | key enter">

當(dāng)ViewModel銷毀時,v-on綁定的事件會自動消除,我們不必親自去清理這些綁定事件,這也防止了內(nèi)存的泄露。 

v-model:為表單元素創(chuàng)建一個雙向綁定,詳細(xì)介紹請看這里 

v-if:根據(jù)綁定值的true或false來插入或移除元素,如例子中我們將根據(jù)test的正確與否決定兩個<p>元素是否插入<template>當(dāng)中

<template v-if="test">
 <p>hello</p>
 <p>world</p>
</template>
 

v-repeat:為綁定數(shù)組或?qū)ο笾械拿恳粋€item創(chuàng)建一個子ViewModel,或者為綁定的數(shù)字值創(chuàng)建對應(yīng)數(shù)量的子ViewModel。并根據(jù)綁定值的改變隨時更新。沒有提供參數(shù)時子ViewModel會直接使用綁定數(shù)組中的分配單元作為它的$data,如果值不是一個對象,則會創(chuàng)建一個數(shù)據(jù)包裝對象,而值會被設(shè)置在別名為$value的 key 上。

<ul>
 <li v-repeat="users">
 {{name}} {{email}}
 </li>
</ul>

如果提供了參數(shù),我們將創(chuàng)建一個數(shù)據(jù)包裝對象,將參數(shù)作為對象的key,從而訪問對象模板中的屬性:

<ul>
 <li v-repeat="user : users">
 {{user.name}} {{user.email}}
 </li>
</ul>

v-with:這個指令只能結(jié)合接下來講到的v-component指令使用,作用是讓子ViewModel可以繼承父ViewModel的數(shù)據(jù),我們可以傳入父ViewModel的屬性對象或單個屬性,在子ViewModel中訪問:

// parent data looks like this
{
 user: {
 name: 'Foo Bar',
 email: 'foo@bar.com'
 }
}

繼承對象:

<my-component v-with="user">
 <!-- you can access properties without `user.` -->
 {{name}} {{email}}
</my-component>

繼承單個屬性:

<my-component v-with="myName: user.name, myEmail: user.email">
 <!-- you can access properties with the new keys -->
 {{myName}} {{myEmail}}
</my-component>

v-events:這個指令也只能結(jié)合接下來講到的v-component指令使用,它使得父ViewModel能夠監(jiān)聽子ViewModel上的事件,我們要注意區(qū)分v-on與v-events,v-events監(jiān)聽的是通過vm.$emit()創(chuàng)建的 Vue 組件系統(tǒng)事件,而不是 DOM 事件。我們舉例說明:

<!-- inside parent template -->
<div v-component="child" v-events="change: onChildChange"></div>

當(dāng)子ViewModel調(diào)用this.$emit('change', …)時會觸發(fā)父ViewModel的onChildChange()方法,并且把emit函數(shù)中附加的參數(shù)傳給onChildChange()方法。 

2.Literal Directives(字面指令)

字面指令并沒有綁定到某一個對象上,字面指令是把它們的參數(shù)作為純字符串傳給bind()函數(shù)中執(zhí)行一次,字面指令可以接受{{mustache}}表達(dá)式,但是該表達(dá)式只會在編譯階段執(zhí)行一次,不會綁定數(shù)據(jù)的改變:

下面看一看具體的api:

v-component:之前提到過,這是使用我們提前聲明并注冊好的組件構(gòu)造器將當(dāng)前元素編譯為子ViewModel,從而實現(xiàn)數(shù)據(jù)繼承,之后的文章會詳細(xì)介紹組件系統(tǒng)。 

v-ref:在父ViewModel中創(chuàng)建子ViewModel的引用,方便父ViewModel中的$對象訪問子組件:

<div id="parent">
 <div v-component="user-profile" v-ref="profile"></div>
</div>
var parent = new Vue({ el: '#parent' })
// 訪問子組件
var child = parent.$.profile

這個指令只能與v-component和v-repeat一起使用,與v-repeat一起使用時,其value是與綁定數(shù)據(jù)數(shù)組對應(yīng)的子組件數(shù)組。 

v-el:為當(dāng)前dom元素創(chuàng)建一個引用,供其自身vue實例使用,例如<div v-el="hi">可以使得vm.$$.hi訪問到該dom元素 

v-partial:將當(dāng)前dom元素中的innerHTML替換為事先注冊的partial,有兩種寫法,{{ mustache}}可以讓dom元素隨數(shù)據(jù)改變而更新: 

<!-- content will change based on vm.partialId -->
<div v-partial="{{partialId}}"></div>

另一種寫法則沒有數(shù)據(jù)跟隨更新的效果:

<div>{{> my-partial}}</div>

v-transition:為當(dāng)前dom元素在指定參數(shù)值作用時添加動畫效果,后續(xù)文章會詳細(xì)介紹 

3.Empty Directives(字面指令)

v-pre:這個指令是通知編譯器跳過當(dāng)前dom元素和其所有子元素,這是為了在我們編程過程中對無需編譯的元素節(jié)省編譯時間

v-cloak:在當(dāng)前元素編譯完成之前改指令都會存在,我們一般使用這個指令來在元素編譯未完成時隱藏原始的 {{ Mustache }} 模板,可以在css中這樣寫:

[v-cloak] { display: none }

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

相關(guān)文章

  • ElementUI下拉組件el-select一次從后端獲取選項并設(shè)置默認(rèn)值方式

    ElementUI下拉組件el-select一次從后端獲取選項并設(shè)置默認(rèn)值方式

    這篇文章主要介紹了ElementUI下拉組件el-select一次從后端獲取選項并設(shè)置默認(rèn)值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue-Element-Admin前端接入SSO的方法步驟

    Vue-Element-Admin前端接入SSO的方法步驟

    本文主要介紹了Vue-Element-Admin前端接入SSO的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • vue利用vant組件實現(xiàn)輪播圖效果

    vue利用vant組件實現(xiàn)輪播圖效果

    vant組件適用于移動端項目,目前項目開源,是市面上做的比較好的開源項目,功能比較強大,本文小編就來為大家介紹一下如何利用vant實現(xiàn)輪播圖效果吧
    2023-10-10
  • 當(dāng)vue路由變化時,改變導(dǎo)航欄的樣式方法

    當(dāng)vue路由變化時,改變導(dǎo)航欄的樣式方法

    今天小編就為大家分享一篇當(dāng)vue路由變化時,改變導(dǎo)航欄的樣式方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue3中的createApp分析

    vue3中的createApp分析

    這篇文章主要介紹了vue3中的createApp分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 基于vue2的table分頁組件實現(xiàn)方法

    基于vue2的table分頁組件實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了基于vue2的table分頁組件實現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Element-UI踩坑之Pagination組件的使用

    Element-UI踩坑之Pagination組件的使用

    這篇文章主要介紹了Element-UI踩坑之Pagination組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • vue中v-model雙向綁定input輸入框問題

    vue中v-model雙向綁定input輸入框問題

    這篇文章主要介紹了vue中v-model雙向綁定input輸入框問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 實例分析編寫vue組件方法

    實例分析編寫vue組件方法

    在本篇文章中我們給大家總結(jié)了關(guān)于編寫vue組件的方法知識點,有此需要的讀者們跟著學(xué)習(xí)下。
    2019-02-02
  • vue中的v-if基本使用(最新推薦)

    vue中的v-if基本使用(最新推薦)

    v-if根據(jù)表達(dá)式的真假,切換元素的顯示和隱藏操作DOM元素,這篇文章主要介紹了vue中的v-if基本使用,需要的朋友可以參考下
    2022-12-12

最新評論