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-official을 최신 버전으로 업데이트하고 링크에서 언급 된 몇 가지 사항을 시도했지만 진실은 내 webpack 지식이별로 깊지 않아 옵션이 없어졌습니다. 나는 무엇이 일어나고 있는지 이해하려고 노력할 것이고, 내가 무엇인가에 올 때 나는 여기에 게시 할 것이다. 그 동안 도움이 될만한 것을 찾으면 공유하십시오. 고맙습니다. –
사실 이러한 경우에, 나의 첫 번째 선택은 webpack 설정을 너무 많이 망쳐 놓는 것이 아닙니다. 이유는 유지하고 다른 팀원에게 설명하는 것이 악몽이되기 때문입니다.그래서 다른 사람들이 어떻게 그 문제를 해결할 수 있었는지에 대한 github 문제 페이지를 자세히 읽고 싶지 않았습니다. 주기적으로 가져 오기를 피하기 위해 앱 디자인을 변경하는 것이 더 쉬워야합니다. 그러나 간단한 방법을 찾으면 위의 대답을 다시 편집 할 것입니다. – Mani
웹 패키지 제한 때문에 APP 디자인을 변경할 필요가 없습니다. APP 컨텍스트에서 이와 같은 구성 요소 구조를 갖는 것이 합리적입니다. 이 문제를 해결할 수 있기를 바랍니다. –