官方文件中的例子只是給了**的一部分,經過自己的摸索,差不多寫出乙個可以更好解釋這個問題的需求,下面的原始碼(用vscode編寫):
需求: 有乙個陣列,存有多個物件,每個物件都有乙個屬性 isname: true 或者 isname: false。現在要遍歷每個陣列,實現isname: true 時,顯示這個名字,isname: false 時不顯示。
// 第二種就是為了避免v-if和v-for同時使用,用到的方法,通過計算屬性來實現
}
第一種方法: 直接 v-if 和 v-for 同時使用,但是在vue中會優先執行v-for, 當v-for把所有內容全部遍歷之後 , v-if再對已經遍歷的元素進行刪除 , 造成了載入的浪費 。
第二種方法: 使用計算屬性將有 isname: false 屬性的名字先過濾掉,再通過 v-for 顯示在頁面上。
例如,在乙個array
中,刪掉偶數,只保留奇數,可以這麼寫:
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) );
r; // [1, 5, 9, 15]
官方文件解釋: 避免-v-if-和-v-for-用在一起-必要 v if和v for為什麼不要使用在同乙個元素上
vue官方強烈建議不要將v for和v if用在同乙個元素上 因為v for比v if有更高的優先順序,所以即使只是需要通過v if來渲染一部分內容,也需要在每次重新渲染的時候遍歷整個列表,而不考慮需要的內容是否發生了變化,所以不在同乙個元素上同時使用v for和v if是一種提公升效能的手段 當然...
為什麼Vue中的v if和v for不建議一起用?
v if 指令用於條件性地渲染一塊內容。這塊內容只會在指令的表示式返回 true 值的時候被渲染 v for 指令基於乙個陣列來渲染乙個列表。v for 指令需要使用 item in items 形式的特殊語法,其中 items 是源資料陣列或者物件,而 item 則是被迭代的陣列元素的別名 在 v...
v for和v if優先順序
原始碼位置vue src complier codegen index.js function genelement el astelement,state codegenstate string if el.staticroot el.staticprocessed else if el.once...