vue dom有 v-for 还有 v-if 有没办法, v-if 某条件时,终止 v-for,不再循环下去了

vue dom 中的 v-for 还有 v-if
有没办法, v-if 某条件时,终止 v-for,不再循环下去了

不推荐v-for与v-if同时使用,因为v-for的优先级较高,会先讲所有的dom渲染才会根据v-if去判断销毁,影响性能。想要达成你说所的效果,其中一个方法是可以对原始数据进行处理,将你最终需要渲染的数据先过滤出来,然后再赋值给v-for的数据源或变量。做法如下,可以在你最开始拿到原始数据的地方,对数据根据条件进行过滤,然后把新的数据赋值给v-for的数据源即可。

v-if 无法真正终止 v-for循环,可以写一个 computed ,在 computed 中生成一个新的数组,并用if设置终止条件
v-for循环这个新生成的数组即可

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <title> 页面名称 </title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
</style>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="itme in eacharr"> {{ itme }} </li>
        </ul>
    </div>

<script>
    var vm = new Vue({
        el:"#app",
        data:{
            arr: [11, 22, 33, 44, 55, 66, 77, 88, 99]
        },
        computed: {
            eacharr: function () {
                var i = 0;
                for (; i < this.arr.length; i++)
                    if (this.arr[i]==66)  //终止条件
                        break;
                return this.arr.slice(0,i);
            }
        }
    });
</script>
</body>
</html>

建议过滤掉不需要的数据,剩下需要的数据再利用v-for循环遍历取出渲染

如果必须要一起,那数据里需要带个判断属性的值,类似如下

<ul v-for="(item, index) in list" :key="index">
   <li v-if="item.checked">{{item.title}}</li>
</ul>
复制代码
 data () {  // 业务逻辑里面定义的数据
    return {
      todo: '',
      list: [{
        title: '111111',
        checked: true
      }, {
        title: '22222',
        checked: false
      }]
    }
  }

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632