天天看點

vue3.x 中 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}]
 },           
vue3.x 中 v-if 與 v-for 的優先級

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

  • 這意味着 v-if 的條件将無法通路到 v-for 作用域内定義的變量别名:
vue3.x 中 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}]
  }
}
...           
vue3.x 中 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
  })
 }
},
...           

總結:

  • vue2.x版本中v-for比v-if優先級更高
  • vue3.x版本中v-if比v-for優先級更高
  • 同一個元素中避免同時使用v-if、v-for
  • 使用計算屬性篩選清單
vue3.x 中 v-if 與 v-for 的優先級