VUE中v-for和v-if不能同時使用的問題


  在開發時候碰到了一個問題:v-if和v-for不能同時使用:

<h-tab-pane
              v-for="(item, index) in tabItems"
              :key="index"
              :label="item.title"
              :id="item.id"
              :name="item.id"
              v-if="item.show"
            >
              <comment :is="item.componentName"></comment>
            </h-tab-pane>

查找資料,官方的例子如下:(風格指南:https://cn.vuejs.org/v2/style-guide/

<ul>
  <li
    v-for="user in users"
    v-if="user.isActive"
    :key="user.id"
  >
    {{ user.name }}
  </li>
</ul>

原因:當 Vue 處理指令時,v-for 比 v-if 具有更高的優先級,所以上述模板會進行如下運算:

this.users.map(function (user) {
  if (user.isActive) {
    return user.name
  }
})

  因此哪怕我們只渲染出一小部分用戶的元素,也得在每次重渲染的時候遍歷整個列表,不論活躍用戶是否發生了變化。

  通過將其更換為在如下的一個計算屬性上遍歷:

computed: {
  activeUsers: function () {
    return this.users.filter(function (user) {
      return user.isActive
    })
  }
}
<ul>
  <li
    v-for="user in activeUsers"
    :key="user.id"
  >
    {{ user.name }}
  </li>
</ul>

 


 

  在找資料過程中,發現了另一種方法,實測可用:https://forum.vuejs.org/t/vue3-x-v-for-v-if-v-if-v-else/71414/3

 <template v-for="(item, index) in tabItems">
              <h-tab-pane
                v-if="item.show"
                :key="index"
                :label="item.title"
                :id="item.id"
                :name="item.id"
              >
                <comment :is="item.componentName"></comment>
              </h-tab-pane>
            </template>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM