2017-06-30 10 views
2

私のウェブサイトは、ページの読み込みを要求するのではなく、特定のDOMを上書きします。時には、DOM内にいくつかのVue.jsコンポーネント(すべてが単一ページコンポーネントです)が上書きされます。それらのほとんどは、コンポーネントを構築する唯一の目的のために作成されたアプリにあります。Vue.jsコンポーネントを削除するベストプラクティス

つの質問:

  1. は、私は、これらのコンポーネントを破壊する必要がありますか?はいの場合:どのように?

  2. この方法にはより良い解決策がありますか?

答えて

0

は完全に仮想マシンを破壊するコンポーネント

を消去するために破壊するコマンドがあります。既存の他のvmsとの接続をクリーンアップし、すべてのディレクティブのバインドを解除し、すべてのイベントリスナをオフにします。 beforeDestroyと破棄されたフックをトリガします。

https://vuejs.org/v2/api/#vm-destroy

しかし、あなたは唯一の削除は、/ 1鉱石多くのインスタンス(.$mount()またはel: "#app"経由でマウントされているもの)の内側にある部品を、非表示にしたい場合は、経由してコンポーネントを削除しようとする必要がありますv-ifまたはv-showで非表示にします。 $destory()が行うようv-ifが同じようにDOMからコンポーネントを削除する一方、V-ショーはちょうどdisplay:noneを設定します

<my-component v-if="showMyComponent"></my-component> 
<my-component v-show="showMyComponent"></my-component> 

:インスタンスのテンプレートで

が、これは次のようになります。 https://vuejs.org/v2/guide/conditional.html#v-if-vs-v-show

+0

おかげで中に使用する必要があります。これは、あなたがあなたのページに何を持っているかを追跡し、始めにすべてをロードすることを前提としています。私はajaxを使ってを送信します。私はメモリ使用量にもっと興味があります – clod986

+0

'v-if =" x "'を使用し、xがvm.dataの変数であり、これがfalseと等しいもので初期化されている場合、コンポーネントはロードされません。始まり。 xがtrueのときにのみロードされます。 – Reiner

2

あなたは、ローカルデータ小道具を使用してディレクティブV-ショーと答えのためのV-IF

<div id="application"> 
    <vm-test v-if="active"></vm-test> 
    <div @click="toggle()">toggle</div> 
</div> 

Vue.component('vm-test', { 
    template: '<div>test</div>' 
}); 

var vm = new Vue ({ 
    el: "#application", 
    data: function() { 
     return { 
      active:true 
     } 
    }, 
    methods: { 
     toggle: function() { 
      this.active = !this.active; 
     } 
    } 
}) 

https://jsfiddle.net/99yxdacy/2/

+0

これはパート2の回答ですか? – clod986

+0

見ると、Vueアプリからコンポーネントを削除/非表示する場合は、Vueのdataプロパティを使用する必要があります。あなたがVueを破壊したいなら - $ destroyメソッドを使います。 "toggle"を押すと、私はfiddle:https://jsfiddle.net/99yxdacy/3/ を更新します。あなたがDOM内のコンポーネントを切り替えると、「破棄」を押すとDOMからVueアプリが削除されます。 – drch

関連する問題