Vue列表渲染

2022-09-18 14:12:16 字數 3462 閱讀 3489

我們用v-for指令根據一組陣列的選項列表進行渲染。v-for指令需要使用item in items形式的語法:

var vm = new vue(,]}

})

在v-for塊中,我們擁有對父作用域屬性的完全訪問許可權。v-for還支援乙個可選的第二個引數為當前項的索引。

var vm = new vue(,]}

})

也可以用of替代in作為分隔符,因為它是最接近j**ascript迭代器的語法:

也可以使用v-for通過對乙個物件的屬性迭代。

new vue(

}})

也可以提供第二個引數為名:

} : }

第三個引數為索引:

}. }: }

當vue使用v-for正在更新已渲染過的元素列表時,它預設就地復用。如果資料項的順序被改變,vue將不會移動dom元素來匹配資料項的順序,而是簡單的復用此處每個元素,並且 確保它在特定索引下顯示已被渲染過的每個元素。

這個預設的模式是高效的,但只適用於不依賴子元件狀態或零時dom狀態的列表渲染輸出。

為了給vue乙個提示,以便追蹤每個節點的身份,從而重用和重新排序現有元素,你需要為每項提供乙個唯一key屬性。理想的key值是每項都有唯一id。它的工作方式類似於乙個屬性,所以你需要用v-bind來繫結動態值:

建議盡可能在使用v-for時提供key,除非遍歷輸出的dom內容非常簡單,或者是刻意依賴預設行為以獲取效能上提公升。

(1)變異方法

vue包含一組觀察陣列的變異方法,所以它們也將會觸發檢視更新。這些方法如下:

push()

pop()

shift()

unshift()

splice()

sort()

reverse()

(2)替換陣列

變異方法,是會改變被這些方法呼叫的原始陣列。相比之下也有非變異方法:

filter()

concat()

slice()

這些方法不會改變原始陣列,但是總會返回乙個新陣列。當使用非變異方法時,可以用新陣列替換舊陣列:

ex.items = ex.items.filter(function(item) )
你可能認為這將導致vue丟棄現有dom並重新渲染整個列表。vue為了使得dom得到最大範圍的重用而實現了一些智慧型的、啟發式的方法,所以用乙個含有相同元素的陣列去替換原來的陣列是非常高效的操作。

由於j**ascript的限制,vue補鞥呢檢測以下變動的陣列:

1. 當你用索引直接設定乙個項的時候:vm.items[indexofitem] = newvalue

2. 當你修改陣列的長度時,例如:vm.items.length = newlenth

舉個例子:

var vm = new vue(

})vm.items[1] = 'x' //不是響應式的

vm.items.length = 2// 不是響應式的

為了解決第一類問題,以下兩種方式都可以實現vm.items[i] = newval相同的效果,同時也會觸發響應式更新:

vue.set(vm.items, i, newval)

vm.items.splice(i, 1, newval)

也可以使用vm.$set例項方法,該方法是全域性方法vue.set的乙個別名:

vm.$set(vm.items, i, newval)
為了解決第二類問題,可以使用splice:

vm.items.splice(newlenght)
由於j**ascript的限制,vue不能檢測物件屬性的新增或刪除:

var vm = new vue(

})是響應式的

不是響應式的

對於已經建立的例項,vue不能動態新增根級別的響應式屬性,但是可以通過vue.set(obj,key,value)方法向巢狀物件新增響應式屬性。

var vm = new vue(

}})

你可以新增乙個新age屬性巢狀的userprofile物件:

vue.set(vm.userprofile, 'age', 27)
還可以使用vm.$set例項方法,它只是全域性vu.set的別名:

vm.$set(vm.userprofile, 'age', 27)
有事可能需要為已有物件賦予多個新屬性,所以,如果你想新增新的響應式屬性:

vm.userprofile = object.assign({}, vm.userprofile, )
有時我們想要顯示乙個陣列的過濾或者排序副本,而不是實際改變原始值,我們可以建立返回過濾或排序陣列的計算屬性:

}

data: ,

computed:

}

在計算屬性不適用的情況下,可以使用method方法。

v-for也可以取整數。在這種情況下,它將重複多次模板。

}

類似於v-if,你也可以利用帶有v-for的渲染多個元素。比如:

當它們處於同一節點,v-for的優先順序比v-if更高,這意味著v-if將分別重複執行於每個v-for迴圈中。當你想僅有的一些項渲染節點時,這種優先順序的機制會十分有用:

}

在自定義元件裡,你可以像任何普通元素一樣用v-for:

在2.2.0+版本裡面。當元件中使用v-for時,key現在是必須的。

然而,任何資料都不會自動傳遞到元件中,因為元件有自己的獨立作用域,為了把迭代資料傳遞到元件裡,我們要用props:

不自動將item注入到原元件裡的原因是這會使得元件與v-for的運作耦合,明確元件資料的**能夠使元件在其他場合重複使用。

vue 列表渲染

列表渲染 v for指令 v for in data 如果需要 索引 index v for item,index in data 物件 v for index,item,key in obj 例子 總結 v for 最多可以有三個引數 格式v for index,item,key in data ...

vue列表渲染

v for更新渲染過的元素列表,預設使用復用策略,這個預設的模式是高效的,但是只適用於不依賴子元件狀態或臨時 dom 狀態 例如 表單輸入值 的列表渲染輸出 迭代物件屬性有三個引數,value,name,index 使用陣列的變異方法改變陣列觸發檢視更新 使用非變異方法返回乙個新陣列來替換原陣列時,...

Vue 模板渲染 條件渲染 列表渲染

當獲取到後端資料後,我們會把它按照一定的規則載入到寫好的模板中,輸出成在瀏覽器中顯示的 html,這個過程就稱之為渲染。而 vue.js 是在前端 即瀏覽器內 進行的模板 渲染。1.前後端渲染對比 前端渲染 的優勢 是在瀏覽器裡利用 js 把資料和 html 模板進行組合,業務分離,後端只需要提供資...