2017-09-06 15 views
0

私はVueをAEMと呼ばれるCMSに統合しています。それは基本的にVueのようなコンポーネントベースシステムとして機能します。しかし、webpackと.vueファイルのインポートを持つ代わりに、このCMSのすべてのコンポーネントは新しいVueインスタンス(新しいVue({...}))です。だから私のページには、同じストア(vuex)を使ってお互いに通信する多くのVeインスタンスがあります。別のVueインスタンス内のVueインスタンス

これは実際にうまくいきますが、別のCMSコンポーネント内にCMSコンポーネントが必要な場合のシナリオがあります。これらのコンポーネントはいずれも一意のvueインスタンスであり、親からの「el」プロパティには子からの「el」が含まれているため、子コンポーネントは機能しません。

私はこれがこのlibの予想される使用ではないことを知っていますが、このシナリオでは両方のvueインスタンスまたは別のアプローチで同じ "コンテキスト"を伝えるか共有することができます。

Thx、 Alexandre。

答えて

2

Vueのインスタンスは1つだけです。私はあなたが

  • あなたのすべての既存のVueのインスタンスは、このアプローチでは部品
  • 登録ルートVueのインスタンス内のすべてのコンポーネント
  • に変身bodyタグ内の単一の空のVueのインスタンスを作成することをお勧め

    • 1つのコンポーネントを別のコンポーネントにネストすると問題ありません。

    0

    one Vueインスタンスが@shrpneとして記述されています。

    すべてのコンポーネントのVueインスタンスをインスタンス化し続けると、デバッグ中またはコンポーネント通信中に問題が発生し、全体的に非常に厄介になり、Vueによって提供される親子通信および継承が欠落します。

    私はあなたのVueアーキテクチャーについてはわかりませんが、私は現在、AEMのVueで作業するためのマニュアルを作成しています。

    基本的な前提は、ビルド時にVueのinline-templateとvanilla-js、No typescript、nodeJS build、jsxなどを使用することです。ページがロードされ、jsバンドルが存在する前でもDOMはすでにそこにあるので、すべてのコンポーネントをマウントする1つのVueインスタンスをインスタンス化するだけで、コンポーネントをマウントする必要があります。これはSEOにも最適です(サーバー側でVueコンポーネントをJavaでレンダリングする予定がない限り...理論的には可能ですが、幸運を祈る!ここでは)

    はサンプルAEM/Vueのコンポーネントです:

    <simple-counter inline-template> 
        <button v-bind:style="style" v-on:click="add">${properties.clicksText || 'clicks: '} {{ counter }}</button> 
        </simple-counter> 
    

    JS:それは

    上にインライン化されますので、それは、JSでテンプレートを持っていませんか

    予告

    Vue.component('simple-counter', { 
        data: function() { 
        return { 
         counter: 0, 
         style: { 
         color: 'red', 
         width: '200px' 
         } 
        } 
        }, 
        methods: { 
        add: function() { 
         this.counter = this.counter + 1; 
         this.style.color = this.style.color == 'red' ? 'green' : 'red'; 
        } 
        } 
    }) 
    

    このようにして、さらにクライアントライブラリの最後に、より多くのAEMコンポーネントをビルドすることができます。すべてのVueのコンポーネントは、実行することができ、登録されています:

    new Vue({ el: '#app'})

    これは、コースを外れ、あなたのページbodyまたはいくつかの他の親要素にidを持っていることを前提としていますapp

    この2番目の部分は、オーサリングダイアログの送信後にコンポーネントの再マウントを有効にする方法です。ページを更新するだけで済みます。

    は、私たちはページhere 基本的な考え方は、コンポーネントにaftereditイベントを追加してのみ、新たに変異したコンポーネントに新しいVueのインスタンスを実行することですを更新せずにコンポーネントを再マウントする方法について質問があります。.. 。まだその

    0

    策に取り組んで:すべてのnew Vue(...)ものを交換してください

    1. より良いインターフェース管理のためにVue.component(...)Vue.extend(...)等に。

    2. のみ使用ONE Vueのインスタンスの魔女は、モジュールにnew Vue({...options})

    3. スライスあなたのvuex店です。
    4. Googleの教師はすべてを知っています。
    関連する問題