美文网首页
v-for 和 v-if

v-for 和 v-if

作者: my木子 | 来源:发表于2021-05-19 07:31 被阅读0次

比较

  • v-forv-if 优先执行,如果一起用会造成性能浪费,可 v-for 外嵌套 v-if 使用。
  • 如果 v-for 内嵌套 v-if ,可先用计算属性 computed 过滤遍历数组再 v-for ,优化性能。
<template>
  <div>
    <p v-for="item in items" :key="item.id" v-if="isHide">{{ item.name }}</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isHide: true,
      items: [
        { id: 1, name: "张三" },
        { id: 2, name: "李四" },
      ],
    };
  },
  created() {
    console.log(this.$options.render);
  },
};
</script>

/**
_l() 列表渲染函数
isHide 在 _l() 函数内部,优先遍历 items,v-for 比 v-if 优先执行

var render = function() {
  var _vm = this
  var _h = _vm.$createElement
  var _c = _vm._self._c || _h
  return _c(
    "div",
    _vm._l(_vm.items, function(item) {
      return _vm.isHide
        ? _c("p", { key: item.id }, [_vm._v(_vm._s(item.name))])
        : _vm._e()
    }),
    0
  )
}
*/
  • v-for 外嵌套 v-if
<template>
  <div>
    <template v-if="isHide">
      <p v-for="item in items" :key="item.id" >{{ item.name }}</p>
    </template>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isHide: true,
      items: [
        { id: 1, name: "张三" },
        { id: 2, name: "李四" },
      ],
    };
  },
  created() {
    console.log(this.$options.render);
  },
};
</script>

/**
先判断 isHide,条件满足再执行 _l() 函数

var render = function() {
  var _vm = this
  var _h = _vm.$createElement
  var _c = _vm._self._c || _h
  return _c(
    "div",
    [
      _vm.isHide
        ? _vm._l(_vm.items, function(item) {
            return _c("p", { key: item.id }, [_vm._v(_vm._s(item.name))])
          })
        : _vm._e()
    ],
    2
  )
}
*/
  • v-for 内嵌套 v-if
<template>
  <div>
    <!-- 方法一 -->
    <!-- <p v-for="item in items" :key="item.id">
      <span v-if="item.check">{{ item.name }}</span>
    </p> -->

    <!-- 方法二(推荐) -->
    <p v-for="item in newItems" :key="item.id">
      <span>{{ item.name }}</span>
    </p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: "张三", check: false },
        { id: 2, name: "李四", check: true },
      ],
    };
  },
  computed: {
    newItems() {
      let items = this.items.filter((item) => {
        return item.check;
      });
      return items;
    },
  },
  created() {
    // console.log(this.newItems);
    console.log(this.$options.render);
  },
};
</script>

相关文章

网友评论

      本文标题:v-for 和 v-if

      本文链接:https://www.haomeiwen.com/subject/ihbujltx.html