2017-08-14 9 views
3

のは、次のように私はVueJSとの基本的なページを持っているとしましょう:出力のVueJSは、正しい順序でmounted()を呼び出すことが保証されていますか?

Vue.component('child', { 
 
    template: '<p>Placed at index {{index}}</p>', 
 
    data() { 
 
    return { 
 
     index: 0 
 
    } 
 
    }, 
 
    mounted() { 
 
    this.index = this.$parent.addElement(this); 
 
    } 
 
}); 
 

 
new Vue({ 
 
    el: '#theParent', 
 
    data() { 
 
    return { 
 
     allElements: [] 
 
    } 
 
    }, 
 
    methods: { 
 
    addElement(elem) { 
 
     this.allElements.push(elem); 
 
     return this.allElements.length - 1; 
 
    } 
 
    } 
 
});
<script src="https://cdn.jsdelivr.net/vue/2.3.2/vue.min.js"></script> 
 
<div id="theParent"> 
 
    <child></child> 
 
    <child></child> 
 
    <child></child> 
 
</div>

目的は要素がで挿入されているかどうかインデックスで説明するだけです。私のユースケースでは、要素がHTMLに表示されるのと同じ順序で追加される必要があります。このページを実行するたびに、出力が順調に進行しているように見えます。

私の質問です:この動作は常に起こることが保証されていますか?VueJSは常に、コンポーネントに表示される順序でmounted()を実行しますか?そうでない場合は、正しい順序で配列に追加されることを保証する別の方法がありますか?

+0

コンポーネントの複雑さによっては、順序が保証されません。 なぜ '$ parent.addElement'を実行しますか?あなたのコンポーネントは、すでにこのコンポーネントの子です。 あなたがしたいのは、要素の順序を関数の特定の実行またはderと一致させることです。私は、順序をレンダリングするのではなく、子コンポーネントを作成するために繰り返す配列のような、さまざまな真実のソースを使用することをお勧めします。 –

+0

残念ながら、配列内の ''コンポーネントは実際のユースケースで定義されているので、大量のHTML( ' 'でレンダリングされています)で定義され、すべてのHTMLを配列内の文字列は本当の混乱になります。 – abagshaw

+0

実際のユースケースに近いコード例を提供できますか? –

答えて

0

私のVueとAg-Grid拡張機能の経験からは、必ずしもそうではありません。

正しい順序でロードされていることを確認するために、私はwatchを実装して、VueにDOMの準備ができていることを知らせます。

beforeMountまたはcreatedでも、DOM要素が何らかの形で遅れて起動されても助けられません。

computed: { 
    elementWatcher() { 
     return this.whateverDOMElement // after this child is ready 
    } 
    } 

    watch: { 
    elementWatcher (val) { 
     if (val) { 
     this.mountAnother() // parent can be mounted 
     } 
    } 
    } 
関連する問題