2016-07-05 20 views
5

私はかなり長い間このことに忙しくていて、解決策を思い付いていません。問題は、Require JSとVue/Vuexでビルドされたモジュールが外界と通信できるようにすることです。Vueアプリケーションの外からVueメソッドまたはイベントにアクセスする

私はこれは私のカスタム要素

<div id="app"> 

    <customer-select></customer-select> 

</div> 

と私のmain.js.あるこの

require(["myModule"],function(vm){ 
vm.$children[0].myMethod() 
}); 

やjqueryの

// inside app 
$(document).trigger("myEvent",payload); 

// outside app 
$(document).on("myEvent",myHandler); 

を使用したくありません私は

define(["./app2/app"], function (CustomerSelectApp) { 
    CustomerSelectApp.init("#app"); 
}); 

私app.js

define([ "vue", "jquery", "webjars/nm-customer-select/nm-customer-select", 
    "css!bootstrap-css" ], 

function(Vue, $, customerSelect) { 

return { 
    init : function(targetElement) { 
     return new Vue({ 
      el : targetElement, 


      components : { 
       customerSelect : customerSelect 
      } 

     }); 
    } 

}; 

}); 

私のAMDモジュールをロードするためにrequirejsを使用しているアプリ/コンポーネントを作成する方法はありますイベントや参照その介して外部の世界と通信私は渡す?

特に。私はそれを処理するために選択したデータを受け取り、私のVueのアプリで選択して、それについて知っている同じページに別のアプリケーションをできるようにしたいさらに

+0

おそらくこれは少し遅れますが、メディエータとしてストレージを使用するのはどうですか? sessionStorageやlocalStorageのようなもの?問題は、データがあるかどうかを確認するためにlocalstorageをチェックし続ける必要があるため、グローバルWindowの関数を作成し、window.readDataなどのコンポーネント内で呼び出すことができるということです。 –

答えて

1

あなたはwindow.name

を使用して、グローバル変数としてルートVueのノードを格納してみてください
define(["./app2/app"], function (CustomerSelectApp) { 
    window.VueRoot = CustomerSelectApp.init("#app"); 
}); 

は、その後、アプリケーションの他の部分であなたは

VueRoot.method(); 
VueRoot.data = value; 
VueRoot.$emit('event', data); 

を持つことができ、それはそうでない場合は、あなたのグローバルな名前空間を汚染と同じように私はあなたのルートノードでこれをやってお勧めします。

関連する問題