我设法使用name
属性直接创建自嵌套组件,并且所有工作都完美无缺。如何在Vue JS 2中间接自嵌套组件?
<template>
<div>
<span>Hi, I'm component A!</span>
<component-a></component-a>
</div>
</template>
<script>
export default {
name: 'component-a',
components: {
'component-a': this
}
}
</script>
现在,我想创建间接自嵌套组件。事情是这样的:
ComponentA.vue:
<template>
<div>
<span>Hi, I'm component A!</span>
<component-b v-if="hasItems" v-for="item in items" :item="item"></component-b>
</div>
</template>
<script>
import ComponentB from './ComponentB.vue'
export default {
name: 'component-a',
components: {
'component-b': ComponentB
},
props: ['items'],
computed: {
hasItems() {
return this.items.length > 0
}
}
}
</script>
ComponentB.vue:
<template>
<div>
<span>Hi, I'm component B!</span>
<component-a v-if="hasItems" :items="item.items"></component-a>
</div>
</template>
<script>
import ComponentA from './ComponentA.vue'
export default {
name: 'component-b',
components: {
'component-a': ComponentA
},
props: ['item'],
computed: {
hasItems() {
return this.item.items.length > 0
}
}
}
</script>
但是失败了。我得到以下错误:
[Vue warn]: Failed to mount component: template or render function not defined. (found in component)
有没有人遇到过这样的事情,并能解决它?根据文档,我们有控制递归组件与条件呈现,我在做什么......我甚至试图使用组件上的name
道具,但它什么也没做(我认为它应该,因为组件不是直接自嵌套)。
我一直在分析你提供的链接,它似乎确实与webpack相关,以及如何处理循环导入。但我无法找到一个解决方案或解决方法...我已经更新laravel-elixir-webpack官员到最新版本,并尝试了一些链接中引用的东西,但事实是,我的webpack知识不是很深,我没有选择。我会一直试着理解发生的事情,当我找到某些东西时我会在这里发帖。如果在此期间您找到任何可以提供帮助的东西,请分享。谢谢。 –
实际上,在这种情况下,我的第一选择不是太乱Webpack配置。原因是因为它成为维护和解释给其他团队成员的噩梦。这就是为什么我不想深入阅读关于其他人如何解决它的github问题页面。改变应用设计应该更容易,而不是循环导入。但是如果我找到了一个简单的方法,我会回到上面编辑我的答案。 – Mani
由于webpack的限制,我不应该改变我的APP设计。在APP上下文中有这样的组件结构是有意义的。我真的希望有这样的解决方法... –