Мне удается создавать непосредственно самовложенные компоненты, используя свойство name
, и все работает отлично.
<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]: не удалось смонтировать компонент: шаблон или функция рендеринга не определены. (находится в компоненте)
Кто-нибудь сталкивался с чем-то подобным и смог это решить? Согласно документации, у нас есть управляющие рекурсивные компоненты с условным рендерингом, что я делаю ... Я даже пытался использовать опору name
для компонентов, но ничего не сделал (и я не думаю, что должен, поскольку компоненты не являются непосредственно самовложенными. ).