Vue入門系列(四)Vue模板和指令

Vue模板和Angular模板相似,擁有指令和組件標簽。

在渲染層上,Vue2.0引入虛擬DOM。Vue編譯器會把模板編譯成一個渲染函數(shù)(類似React),函數(shù)被調(diào)用的時候會返回一個虛擬DOM樹,其描述了當前頁面所處的狀態(tài)。當發(fā)生數(shù)據(jù)改變時,模板更新重新編譯生成一個新的虛擬DOM樹,將新樹和舊樹對比,找到不同點,再最終修改真實的DOM節(jié)點。

1. 模板

下面是一個簡單的Vue模板例子:

<div id="app">
  <ul>
    <li v-for="todo in todos" v-on:click="todo.done=!todo.done">
      {{todo.title}}
    </li>
  </ul>
</div>

模板的文本數(shù)據(jù)綁定使用“mushtache”語法,{{}}內(nèi)插入文本變量。

2.指令

Vue指令以v-開頭,作用在HTML元素上,將指令綁定在元素上,給綁定的元素添加一些特殊行為。

Vue常用指令如下:

//更新綁定元素中的內(nèi)容,類似于$.text()
<p v-text="textStr"></p>

//更新綁定元素中的html內(nèi)容,類似于$.html()
<p v-html="htmlStr"></p>

//根據(jù)表達式的值(true/false)渲染元素。如果isShow為false則不會渲染p標簽
<p v-if="isShow"></p>
<p v-else></p>

//根據(jù)表達式的值(true/false)顯示或隱藏元素。如果isShow為false則p標簽樣式為"display:none"
<p v-show="isShow"></p>

//用于遍歷數(shù)據(jù)渲染元素或模板。如果list為[1,2,3]則會渲染3個p標簽,內(nèi)容依次為1,2,3
<p v-for="item in list"></p>

//用于在元素上綁定事件。p標簽上綁定了clickAction的點擊事件
<p v-on:click="clickAction"></p>

//用于在元素上綁定屬性值。類似于$.attr("title", "titleStr");
<p v-bind:title="titleStr"></p>

//在表單元素上創(chuàng)建雙向數(shù)據(jù)綁定。一旦input有新的輸入,數(shù)據(jù)inputVal同步更新;反之亦然
<input v-model="inputVal"/>

//修飾符(.xxx),用于指明指令以一種特殊方式綁定。.prevent代表調(diào)用event.preventDefault()方法
<form v-on:submit.prevent="onSubmit"></form>

//過濾器用作文本格式化。filterId和filterText是兩個過濾器定義
<div v-bind:id="idStr | filterId">{{text |  filterText}}</div>
指令縮寫
  1. v-bind縮寫:<a v-bind:href="url"></a>==> <a :href="url"></a>
  2. v-on縮寫:<a v-on:click="doSomething"></a> ==> <a @click="doSomething"></a>
自定義指令

通過自定義指令,可以做一些特殊的改變DOM的行為。
自定義指定注冊如下:

Vue.directive('demo', {
  // 鉤子函數(shù)
  bind(){...}  
  inserted(){...},
  ...
})
// 使用自定義指令
<div v-demo></div>

注冊自定義指定最重要是鉤子函數(shù),針對具體功能,復寫不同的鉤子函數(shù)。

自定義指令鉤子函數(shù) 說明
bind (調(diào)用一次)指令第一次綁定到元素時調(diào)用
inserted 被綁定元素插入父節(jié)點時調(diào)用
update 被綁定元素所在的模板更新時調(diào)用
componentUpdated 被綁定元素所在模板完成一次更新周期時調(diào)用
unbind (調(diào)用一次)指令與元素解綁時調(diào)用

參考官網(wǎng)例子,注冊自定義指令v-focus,用于自動聚焦一個input元素。

Vue.directive('focus', {
  inserted: function (el) {
    el.focus(); // 聚焦元素
  }
})
//使用指令
<input v-focus>

下一節(jié):Vue入門系列(五)組件通信

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容