2016-11-30 7 views
0

私は、タブのような一連のコンポーネントでvue-routerを使用しています。各<router-link>はタブで、下のスペースは<router-view>です。 2つのタブはそれぞれ異なるフィルタを持つ同じコンポーネントですが、それらがproductsで、ルータがフィルタリングのパラメータを追加するとします:/products/new & /products/saleVue 2 <keep-alive><router-view>とキーが動作しない

productsの中には、経路が開かれたときに取り付けられる個別のproductコンポーネントがあります。私の問題は、私がルートを切り替えると、フィルタのパラメータが変更されたときに、毎回productコンポーネントが再マウントされるということです。私はそれらをキャッシュして前後の切り替えが簡単になるようにしたいと思います。これを行うには、<keep-alive>を設定し、:key='$route.fullPath'<router-view>に追加しましたが、キャッシュされていないようです。各productは、productsの間で切り替えると、まだmounted()イベントを発しています。

<keep-alive> 
    <router-view :key='$route.fullPath'></router-view> 
</keep-alive> 

それぞれproductsビューを別のコンポーネントにする必要がありますか?

答えて

1

router-viewkeep-aliveでキャッシュすることはできません。 keep-alivedocumentationから:

キープアライブ彼らはキャッシュされるインスタンスを持っていないので、機能コンポーネントでは動作しません。

そしてrouter-viewdocumentationから機能性成分である:成分は、与えられたパスの整合コンポーネントを描画する機能要素である

、この作業を行うには、次のように、keep-alive内の動的コンポーネントを持っている必要があります:それを指摘して

<keep-alive> 
    <products ></products> 
</keep-alive> 
+0

こんにちは感謝を!最初の解決策は、 ''を削除し、動的コンポーネントを返すことでした。 '<コンポーネントのv-bind:is =" $ route.name "/>'ここで、ルートの名前は次のようになります。コンポーネントの名前これはルーティングに関して機能しますが、コンポーネントは2つのバージョンの間でクリックしたときにまだ再マウントされています。\ – okwme

+0

これ以上は真実ではないようです。 [ルーターのドキュメント](http://router.vuejs.org/ja/api/router-view.html)を引用する: '単なるコンポーネントなので、で動作します。両者を併用する場合は、必ず inside'を使用してください – oliverpool

関連する問題