vue官方爲咱們提供了不少它本身原生的指令, 工做項目中會常常用到,這裏我先爲你們講解幾個基礎的指令html
使用v-cloak指令可以解決差值表達式閃爍的問題vue
// 須要在樣式中設置如下樣式
<style>
[v-cloak] {
display: none;
}
</style>
// 使用方式: 在咱們使用差值表達式的標籤添加該指令
<p v-cloak>{{ msg }}</p>
複製代碼
v-text 是沒有閃爍的問題 可是 v-text 會覆蓋元素中本來的內容,可是差值表達式只會替換本身的這個佔位符,不會把整個元素的內容清空數組
使用方式:
<p v-text>{{ msg }}</p>
複製代碼
v-html 會解析標籤,以上兩種不會,它也會更改元素中本來的內容bash
使用方式:
new app({
el: "#app",
data: {
msg: "<h1>我是一個標籤元素</h1>"
}
})
<p v-html="msg"></p>
複製代碼
// 使用方式:
<p v-bind:title="msg"></p>
簡寫方式:
<p :title="msg"></p>
// 屬性中寫js表達式
<p v-bind:title="msg+'合法表達式'"></p>
複製代碼
// 直接傳遞一個數組, 數組裏面的類名要寫字符串, 注意:這裏的class須要使用v-bind作數據綁定
使用方式:
<p :class="['thin', 'italic']"></p>
複製代碼
// 數組中推薦使用這種方式
使用方式:
<p :class="['thin', 'italic',{'active':flag}]"></p> // 這裏的flag在data中定義, 是一個布爾值
複製代碼
// data中定義一個布爾值類型的flag,在數組中用三元表示來顯示這個flag
使用方式:
<p :class="['thin', 'italic', flag ? 'active':'noactive']"></p>
複製代碼
// 在爲class使用v-bind綁定對象的時候,對象的屬性是類型,
// 因爲對象的屬性可帶可不帶引號,寫法本身決定, 屬性的值是一個標識符
使用方式:
<p :class="{thin: true, italic: true, active: false}"></p>
複製代碼
// 對象就是無序鍵值對的集合
使用方式:
<p :style="{color:'red', 'font-weight':200}"></p>
複製代碼
// 先將樣式定義在data中的一個變量身上
new app({
el: "#app",
data: {
styleObject: {color:'red', 'font-weight':200}
}
})
// 在標籤上,經過屬性綁定的形式,將樣式對象應用到元素中
<p :style="styleObject"></p>
複製代碼
// 先將樣式定義在data中的一個變量身上
new app({
el: "#app",
data: {
styleObject1: {color:'red', 'font-weight':200},
styleObject2: {color:'red', 'font-weight':200}
}
})
// 在標籤上,經過屬性綁定的形式,將樣式對象應用到元素中
使用方式:
<p :style="[styleObject1, styleObject2]"></p>
複製代碼
Vue中惟一一個實現雙向數據綁定的指令, 注意 : 只能運用到表單元素中app
使用方式:
<input v-model="msg"></input> // 修改imput輸入框的值, 下面p標籤綁定的內容會隨之改變
<p>{{ msg }}</p>
複製代碼
在使用 v-for 指令的時候要注意加上 key 屬性post
Vue2.2之後的版本規定,當前組件使用v-for循環的時候, 或者在一些特殊狀況中, 若是v-for有問題, 必須在使用v-for的同時, 指定惟一的字符串/數組類型 :key值。性能
v-for="(val, key) in list" // in 後面能夠放普通數組, 對象數組, 對象, 還能夠放數字學習
// 先在data上定義一個數組
new app({
el: "#app",
data: {
list: [1, 2, 3, 4]
}
})
使用方式:item是循環的每一項,list是循環的數組,index是索引值
<li v-for="(item, index)in list" :key="index">{{index}}~~~{{item}}</li>
複製代碼
new app({
el: "#app",
data: {
list:[{id:1,name:'tank1'}, {id:2,name:'tank2'}, {id:3,name:'tank3'}]
}
})
使用方式:
<li v-for="(item, index)in list" :key="index">
id:{{item.id}} --- 名字:{{item.name}} --- 索引{{index}}
</li>
複製代碼
new app({
el: "#app",
data: {
list: {
name1: "abc1",
name2: "abc2",
name3: "abc3"
}
}
})
使用方式:在遍歷對象身上的鍵值對的時候.除了有val、key, 在第三個位置還有一個索引index, 索引基本用不到
<li v-for="(val, key, index) in list" :key="index">
值是:{{ val }} --- 鍵是: {{key}} --- 索引{{index}}
</li>
複製代碼
若是使用v-for迭代數字,前面的 count 從 1 開始spa
使用方式:
<li v-for="(count, index) in 10" :key="index">這是第 {{count}} 次循環</li>
複製代碼
若是元素涉及到頻繁的切換,最好不要使用 v-if 而推薦使用 v-show雙向綁定
若是元素可能不太頻繁被顯示出來被用戶看,推薦用 v-if 和 v-else
// v-if 的特色: 每次都會從新刪除或建立元素
// v-if 有較高的切換性能消耗
// v-else 元素必須緊跟在帶 v-if 或者 v-else-if 的元素的後面,不然它將不會被識別。
使用方式:
new app({
el: "#app",
data: {
flag: true // 定義一個變量爲布爾值類型
}
})
<p v-if="flag">我在flag爲true的時候顯示</p>
<p v-else>我在flag不爲true的時候顯示</p>
複製代碼
// v-show的特色: 每次不會從新進行DOM的刪除和建立,只是切換了元素的display:none樣式
// v-show有較高的初始渲染消耗
使用方式:
<p v-show="flag">我在flag爲true的時候顯示</p>
複製代碼