王叔叔又來了,小白第二篇爲你們獻上css
功能:根據一組數據的選項列表進行渲染(自動for循環)。 語法: value,key in items / value,key for itemsvue
vue.js 的循環渲染是依賴於 v-for 指令,它可以根據 vue 的實例裏面的信息,循環遍歷所需數據,而後渲染出相應的內容。它能夠遍歷數組類型以及對象類型的數據,js 裏面的數組自己實質上也是對象,這裏遍歷數組和對象的時候,方式類似但又稍有不一樣。數組
<div id="app">
<ul>
<li v-for="(val, key, index) in me">{{index}}. {{key}}: {{val}}</li>
</ul>
</div>
...
var vm = new Vue({
el: '#app',
data: {
me: {
name: 'Dale',
age: 22,
sex: 'male',
height: 170
}
}
});
複製代碼
這裏,v-for 接收的參數相對較複雜,可是能夠分爲三個部分bash
其中,val 是遍歷獲得的屬性值,key 是遍歷獲得的屬性名,index 是遍歷次序,這裏的 key/index 都是可選參數,若是不須要,這個指令其實能夠寫成 v-for="val in me";app
其實也有疑惑in of 有什麼區別函數
in 可使用 of 替代,官方的說法是「它是最接近 JavaScript 迭代器的語法」,但其實使用上並無任何區別;性能
me 是綁定在實例 data屬性上的一個屬性,實際上,它是有一個執行環境的,也便是咱們接觸最多的 vue 實例,模板中,咱們仍舊能夠像在 methods 以及計算屬性中同樣,經過 this 訪問到它,這裏的 me 其實就至關於 this.me,模板中直接寫 this.me 也是可行的。學習
渲染結果以下:ui
<div id="app">
<ul>
<li v-for="(item, index) in items">{{index}}. {{item}}</li>
</ul>
</div>
...
var vm = new Vue({
el: '#app',
data: {
items: ['apple', 'tomato', 'banana', 'watermelon']
}
});
複製代碼
和遍歷對象相相似,最大的不一樣點在於對象的 「key」 和 「index」 是一致的,因此這裏咱們只須要取一個 index 便可,上面代碼的渲染結果以下:this
<div id="app">
<ul class="persons">
<li v-for="(person,index) in persons" :key="index">name: {{person.name}}, age: {{person.age}};</li>
</ul>
</div>
...
var vm = new Vue({
el: '#app',
data: {
persons: [
{
name: 'Dale',
age: 22
},
{
name: 'Tim',
age: 30
},
{
name: 'Rex',
age: 23
}
]
}
});
複製代碼
v-for 同樣,在不綁定 key 屬性的狀況下,vue 默認會重用元素以提升性能,若是不須要它的默認行爲,顯式綁定一個惟一的 key 便可。 本質上是遍歷的一個數組,可是數組的每一個元素倒是一個對象,也就是上面的 person,咱們能夠經過 [] 以及 . 兩種方式去訪問這個對象的屬性,好比這裏的 name / age,渲染結果以下:
緣由:v-for比v-if優先級高,因此不會執行v-if,若是每一次都須要遍歷整個數組,將會影響速度,尤爲是當之須要渲染很小一部分的時候。
<ul>
<li
v-for="user in users"
v-if="user.isActive"
:key="user.id"
>
{{ user.name }}
</li>
</ul>
複製代碼
如上狀況,即便100個user中之須要使用一個數據,也會循環整個數組
正確應該是把你要判斷的數據放到vue的計算屬性裏,它會把數據依據你的條件判斷出來而後再進行循環
computed: {
activeUsers: function () {
return this.users.filter(function (user) {
return user.isActive
})
}
}
<ul>
<li
v-for="user in activeUsers"
:key="user.id"
>
{{ user.name }}
</li>
</ul>
複製代碼
vue提供一組方法,對數組進行操做的時候,會觸發視圖更新(map()不會觸發) ,但其並非原生的方法,原生的方法是不會觸發視圖的更新
push() | pop() | shift() | unshift()
splice() | sort() | reverse()
複製代碼
功能:用來監聽DOM事件觸發代碼。 語法: v-on:eventName = "eventHandle" 指令簡寫: @eventName = "eventHandle"
事件處理函數: 寫在Vue實例的methods中統一進行管理。
事件對象是事件系統提供的,在事件處理函數中獲取
a) 當行間不觸發的時候
v-on:keyup.enter = "addTodo"
addTodo(ev){ } //這裏的ev就是事件對象
複製代碼
b) 當行間觸發的時候(也就是加了個執行的括號)
v-on:keyup.enter = "addTodo(123,$event)" //行間傳入事件對象$event
addTodo(data,ev){ } //須要在頁面傳參的時候,第一個參數爲傳入的參數,第二個參數纔是事件對象
複製代碼
事件處理函數只有純粹的邏輯判斷,不處理DOM事件的細節。
例如,阻止冒泡,取消默認行爲、判斷按鍵 修飾符位置: 以「.」寫在事件名稱後面。 ( v-on:eventName.修飾符 = "xxx")
.stop(冒泡) | .prevent(默認事件) | .capture(捕獲) | .self | .once(執行一次)
複製代碼
若是須要在內聯語句處理器中訪問原生DOM事件。可使用特殊變量$event,把它傳入到methods中的方法中
6 動態綁定class
-最簡單的綁定(這裏的active加不加單引號均可以,如下也同樣都能渲染)
:class="{ 'active': isActive }"
複製代碼
:class="{'active':isActive==-1}"
或者
:class="{'active':isActive==index}"
複製代碼
第一種(用逗號隔開)
:class="{ 'active': isActive, 'sort': isSort }"
第二種(放在data裏面)
//也能夠把後面綁定的對象寫在一個變量放在data裏面,能夠變成下面這樣
:class="classObject"
data() {
return {
classObject:{ active: true, sort:false }
}
}
第三種(使用computed屬性)
:class="classObject"
data() {
return {
isActive: true,
isSort: false
}
},
computed: {
classObject: function () {
return {
active: this.isActive,
sort:this.isSort
}
}
}
複製代碼
*數組與三元運算符結合判斷選擇須要的class (注意:三元運算符後面的「:」兩邊的class須要加上單引號,不然不能正確渲染)
:class="[isActive?'active':'']"
或者
:class="[isActive==1?'active':'']"
或者
:class="[isActive==index?'active':'']"
或者
:class="[isActive==index?'active':'otherActiveClass']"
複製代碼
今天的內容到這裏就結束了,這些都是一些很基礎很基礎一些東西,能夠幫助小白更好的學習,對老人也能夠起到一個簡單的回憶吧,期待下一篇的到來