天天看點

v-if 與 v-for 的優先級對比

作者:RemoveS

vue2.x版本中在一個元素上同時使用 v-if 和 v-for 時,v-for 優先級更高

//html
<p v-for="item in arr2" v-if="item.val>1">{{item.val}}</p>           
//js
data:{
 arr2:[{val:1},{val:2},{val:3}]
 },           
v-if 與 v-for 的優先級對比

vue3.x 版本中 v-if 總是優先于 v-for

這意味着 v-if 的條件将無法通路到 v-for 作用域内定義的變量别名:
v-if 與 v-for 的優先級對比

同時使用 v-if 和 v-for 是不推薦的

可以在 <template> 标簽上使用 v-for 來渲染一個包含多個元素的塊
...
<template v-for="item in arr2">
  <p v-if="item.val>1">{{item.val}}</p>
 </template>
...
data:function(){
 return {
  arr2:[{val:1},{val:2},{val:3}]
  }
}
...           
v-if 與 v-for 的優先級對比

最好辦法是通過建立計算屬性篩選出清單,減少在模闆層面管理相關邏輯

<p v-for="item in newArr">{{item.val}}</p>           
...
data:function(){
 return {
  arr:[{val:1},{val:2},{val:3}]
 }
},
computed:{
 newArr(){
  return this.arr.filter(item=>{
   return item.val>1
  })
 }
},
...           
v-if 與 v-for 的優先級對比

總結:

1、vue2.x版本中v-for比v-if優先級更高

2、vue3.x版本中v-if比v-for優先級更高

3、同一個元素中避免同時使用v-if、v-for

4、使用計算屬性篩選清單

繼續閱讀