2016-07-11 7 views
2

カスタマイズされたコンポーネントを含むhtmlをいくつか読み込み、そのコンテンツを親コンポーネントの固定ノードにマウントします。残念ながら、私はそれらの間に親子関係がないことがわかったので、動的に挿入されたコンポーネントによって送出されたイベントはルートビューで受け取ることができません。 私は1つのフィドルを作成しました。助けや提案は高く評価されています。 http://jsfiddle.net/matiascx/7Ljygv81/1/動的にマウントされたvuejsコンテンツがroot vueインスタンスの子コンポーネントではないのはなぜですか?

<div id="app"> 
    <button v-on="click: addNewElement()">Add custom Element</button> 
    <br /> 
    <div id="dynamicloaded"></div> 
</div> 

JS:あなたが動的に作成するとき

new Vue({ 
    el: '#app', 
    data: { 
     sampleElement: '<div class="dynamic-child"><button v-on="click: test()">Test</button></div>' 

    }, 
    methods:{ 
     addNewElement: function(){ 



      var vmtemp = Vue.extend({ 
          template: this.sampleElement, 
          methods: { 
          test: function(){ 
           alert("comes from dynamically loaded content"); 
           this.$dispatch('child-msg','this comes from ajax loaded component'); 
          } 
          } 
         }); 
      new vmtemp().$mount(document.getElementById('dynamicloaded')); 
     }, 
     test: function(){ 
      alert('Test'); 
     }, 
     events: { 
     'child-msg': function(msg){ 
      console.log('message received'+msg); 
     } 
     } 
    } 
}); 

答えて

0

は通常、Vueのコンポーネントは特定のインスタンスの子ではありません。あなたのaddNewElement関数内でオプション

var _this = this 
var child = new vmtemp({parent:_this}).$mount(document.getElementById('dynamicloaded')) 

内明示的に親を設定することができます。

あなたのために働くかどうか教えてください。

+0

私はあなたの提案に従ってフィディドを更新しましたが、動作しません。通常のコンポーネントでは、イベントシステムで正常に動作します。つまり、通常のコンポーネントがrootの子として動作することができるという証拠です。しかし、動的にマウントされた 'コンポーネント'はルートビューインスタンスの子コンポーネントとして設定できません – kidsit

+0

申し訳ありませんが間違っていましたが、私は自分の答えを更新します。 – gurghet

+0

それは動作しません、あなたは新しいvmtemp({親:_this})以外の他のアイデアを持っていることができます。 – kidsit

関連する問題