Javascript 分离v-if和v-for Vue.js 3

Javascript 分离v-if和v-for Vue.js 3,javascript,vue.js,vuejs2,vuejs3,Javascript,Vue.js,Vuejs2,Vuejs3,我已经读到,我们不应该在vuejs中把v-if和v-for放在一起。我在IDE中也有一个错误。我应该如何在代码中分离v-if和v-for,以便它遵循样式指南 <div v-for="(value, key, index) in items" v-if="value.level === undefined || value.level < level" :key="key"

我已经读到,我们不应该在vuejs中把v-if和v-for放在一起。我在IDE中也有一个错误。我应该如何在代码中分离v-if和v-for,以便它遵循样式指南

<div
        v-for="(value, key, index) in items"
        v-if="value.level === undefined || value.level < level"
        :key="key"
      >
将v-if指令放入虚拟元素模板中:

将v-if指令放入虚拟元素模板中:


可以将不可见包装器元素与v-if一起使用。使用此模板的好处是,在满足条件之前,模板不会进行渲染。您可以阅读有关模板的更多信息

例如:

<div v-for="(value, key, index) in items" :key="key">
  <template v-if="value.level === undefined || value.level < level"> // It won't render until v-if = true
   ....

可以将不可见包装器元素与v-if一起使用。使用此模板的好处是,在满足条件之前,模板不会进行渲染。您可以阅读有关模板的更多信息

例如:

<div v-for="(value, key, index) in items" :key="key">
  <template v-if="value.level === undefined || value.level < level"> // It won't render until v-if = true
   ....

如果不希望dom上有一堆空div,请对其进行过滤

computed: {
   filtered_items: function() {
     return this.items.filter(v => typeof v.level === 'undefined' || v.level < this.level)
   }
},
然后使用筛选的_项,而不是v-for中的项

也可以进行内联操作:


v-for=items.filterv=>typeof v.level==='undefined'| | v.level如果不希望dom上有一堆空div,请对其进行过滤

computed: {
   filtered_items: function() {
     return this.items.filter(v => typeof v.level === 'undefined' || v.level < this.level)
   }
},
然后使用筛选的_项,而不是v-for中的项

也可以进行内联操作:


v-for=items.filterv=>typeof v.level==='undefined'| | v.level大量使用,我还没有看到它以这种方式记录下来。是的,他们将v-for放在模板内部,但模板无法键入大量使用,我没有看到过这样的文档。是的,他们在模板内部放了v-for,但是模板无法键入。第一个建议是最好的,因为计算值被缓存,模板没有被很多逻辑搞乱。是的,只是一个内联选项,虽然仍然是相同的逻辑,已经在视图中,只是在一行,而不是2。虽然我认为OP的v.level