温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何解决v-if与v-for同时使用报错的问题

发布时间:2022-03-29 11:46:05 来源:亿速云 阅读:622 作者:小新 栏目:开发技术

这篇文章主要介绍了如何解决v-if与v-for同时使用报错的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

在进行项目开发的时候因为在一个标签上同时使用了v-for和v-if两个指令导致的报错。

报错代码如下:

<el-input 
  type="textarea"
  :autosize="{ minRows: 2, maxRows: 8}"
  v-for="Oitem in Object.keys(cItem)"
  :key="Oitem"
  v-if="Oitem !== 'title'"
  v-model="cItem[Oitem]">
</el-input>

提示错误:The 'undefined' 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 会根据条件为 true 或 false来决定渲染与否的,所以如果将 v-if 和 v-for一起使用时会特别消耗性能,如果有语法检查,则会报语法的错误。

1. 将 v-for 放在外层嵌套 template (页面渲染不生成 DOM节点) ,然后在内部进行v-if 判断

<template v-for="Oitem in Object.keys(cItem)">
  <el-input 
    type="textarea"
    :autosize="{ minRows: 2, maxRows: 8}"
    :key="Oitem"
    v-if="Oitem !== 'title'"
    v-model="cItem[Oitem]">
  </el-input>
</template>

注意点:key值写在包裹的元素中

2. 如果条件出现在循环内部,不得不放在一起,可通过计算属性computed 提前过滤掉那些不需要显示的项

<template>
  <div>
      <div v-for="(user,index) in activeUsers" :key="user.index" >{{ user.name }}</div>
  </div>
</template>
<script>
export default {
  name:'A',
  data () {
    return {
      users: [{name: 'aaa',isShow: true}, {name: 'bbb',isShow: false}]
    };
  },
  computed: {//通过计算属性过滤掉列表中不需要显示的项目
    activeUsers: function () {
      return this.users.filter(function (user) {
        return user.isShow;//返回isShow=true的项,添加到activeUsers数组
      })
    }
  }
};
</script>

感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决v-if与v-for同时使用报错的问题”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI