zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Remoting系列(一)Remoting的基本概念
    软件设计师
    如果让我重做一次研究生
    VS2005Web控件拖动
    JS实现文本框回车提交
    SqlDataReader
    SqlCommand.ExecuteScalar
    DataSet
    电子商务部应该做些什么?【转】
    e
  • 原文地址:https://www.cnblogs.com/showjs/p/11376446.html
Copyright © 2011-2022 走看看