前言 在 Vue.js 中,v-for 和 v-if 是兩個常用的指令,它們各自有著重要的功能。當我們將這兩者搭配使用時,可以實現更加動態和靈活的 UI。不過,直接在 v-for 中使用 v-if 會導致錯誤。這篇文章將探討這兩個指令如何搭配使用的場景,並提供解決方法。
錯誤範例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <template >   <ul >      <li  v-for ="task in tasks"  :key ="task.id"  v-if ="!task.completed" >        {{ task.name }}     </li >    </ul >  </template > <script > export  default  {  data (     return  {       tasks : [         { id : 1 , name : '任務 1' , completed : false  },         { id : 2 , name : '任務 2' , completed : true  },         { id : 3 , name : '任務 3' , completed : false  },       ],     };   }, }; </script > 
此範例會出現以下錯誤:
1 The 'XXXXX' variable inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if' 
這是因為 v-for 和 v-if 的優先級不同,當它們同時存在於同一節點時,v-if 的優先級高於 v-for,使得 v-if 的條件無法訪問到 v-for 作用域內的變量別名。
正確範例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <template >   <div >      <h1 > 任務清單</h1 >      <p > 已完成清單</p >      <ul >        <template  v-for ="task in tasks" >          <li  v-if ="task.completed"  :key ="task.id" >            {{ task.name }}         </li >        </template >      </ul >    </div >  </template > <script > export  default  {  data (     return  {       tasks : [         { id : 1 , name : '任務 1' , completed : false  },         { id : 2 , name : '任務 2' , completed : true  },         { id : 3 , name : '任務 3' , completed : false  },       ],     };   }, }; </script > 
結論 v-for 和 v-if 的搭配使用可以讓我們在 Vue.js 中靈活地構建條件渲染的列表。這不僅提升了應用的互動性和動態性,也增強了可讀性。在實際開發中,請考慮性能與可讀性,選擇最適合的方式來實現需求。