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の設定をあまりにも混乱させることではありません。なぜなら、他のチームメンバーに説明して説明することは悪夢になるからです。そういうわけで、他の人たちがどうやってそれをどうやってどうやってどうやっていくのか、そのギタップの問題のページを深く読んでみたくないのです。サイクリックインポートを避ける代わりに、アプリのデザインを変更する方が簡単です。しかし、私が簡単な方法を見つけたら、私は戻って上記の私の答えを編集します。 – Mani
ウェブパックの制限のためにAPPデザインを変更する必要はありません。 APPコンテキストでは、そのようなコンポーネント構造を持つことが理にかなっています。私は本当にこれに回避策があることを願っています... –