動的コンポーネントインスタンスを(テンプレートではなく)プログラムで作成する方法を見つける必要があります。動的に作成されたvueインスタンスで「コンポーネントのマウントに失敗しました:テンプレートまたはレンダリング関数が定義されていません」
私は解決策(それはそう)、単にエラーでnew Vue(..)
結果を使用して、新しいVUE-インスタンスを作成する素朴な方法を発見したものの:
Failed to mount component: template or render function not defined
を。
これは私には奇妙なことです。それはあまりにもそうである可能性があるからです。つまり、拡張されたvueクラスで定義されたテンプレートがあります。
以下のコードを参照してください.2つの方法、および動作しない現在の(コメントではない)コードがコメントアウトされています。
マイ不自然コード:
const HelloComponent = Vue.extend({
template: '<p>Welcome home!</p>'
});
const Home1 = {
template: '<p>Welcome home!</p>'
};
const Home2 = {
extends: HelloComponent
};
new Vue({
el: '#app',
data() {
return {
// currentView: Home1 // does work
// currentView: Home2 // does work
currentView: new HelloComponent() //does NOT work. Why?
};
},
template: '<component :is="currentView"></component>',
});
このソリューションでは、上記の「currentView:HelloComponent」という割り当てを行うたびに、私が望む新しいインスタンスは作成されません。 'currentView:{extends:HelloComponent}'は動作します。割り当てごとに新しいインスタンスを作成する必要がある場合は、この方法をお勧めしますか? –
@ Geert-Janもう少し詳しく教えてください。私はcodepenで実験し、currentViewが設定されるたびに、新しいインスタンスを作成するように見えます。 http://codepen.io/Kradek/pen/YZNbJe?editors=1011 – Bert
http://codepen.io/anon/pen/PppPRY?editors=1011を参照してください。あなたのペンとの違いは、最初に別のコンポーネントをロードせずに、同じコンポーネント(ただし別のインスタンス)をロードしたいということです。クリック時に 'currentView:TabPanel'を割り当てるが、別のデータが添付されたユースケース、例えば、複数のタブ。 –