私は簡単な質問があります。ルートが変更されたときにサブコンポーネントをキャンセルしたいだけです。ここにサンプルがあります。親であるホームコンポーネントがあります。それにはサブコンポーネントがあります。私は、サブコンポーネントの経路変更がマウントされたときにインターバル機能を停止したいだけですVueルータbeforeRouteLeaveはサブコンポーネントを停止しません
import Home from "./components/Home.vue";
import Another from "./components/Another.vue";
const routes = [
{ path: '', component: Home },
{ path: '/another', component: Another }
];
const router = new VueRouter({
routes
});
const app = new Vue({
router
}).$mount('#app');
これはホームコンポーネントです。 Home.vue
<template>
<sub-component></sub-component>
</template>
<script type="text/babel">
import SubComponent from "./components/Subcomponent.vue";
export default {
components:{
'sub-component':SubComponent
}
}
</script>
これはサブコンポーネントです。 Subcomponent.vue
<template>
<div> Sub component will run a interval </div>
</template>
<script type="text/babel">
import SubComponent from "./components/Subcomponent.vue";
export default {
components:{
'sub-component':SubComponent
},
mounted:function(){
setInterval(function(){
console.log("I should cancel when route changed");
},1000)
}
}
</script>
私はbeforeRouteLeaveメソッドを試しましたが、Home.vueメソッドのみを停止しました。
ありがとうございました。それは私の問題を解決する。しかし、私はbeforeRouteLeaveがすべてのサブコンポーネントプロセスを殺すべきだと思います。そうですか? –
Vueルータは、Vue固有の項目のみをクリーンアップします。 'setInterval'はjavascript仕様の一部です。これは手動で、またはページから遠ざかるまで(スペックに従って)永遠に実行されます。 – Mani
私はちょうど解決策がはるかに簡単になることを認識し、私は私の答えに代替方法を追加しました。元の方法は依然として有効です。要件に基づいてこれらの方法のいずれかを選択することができます。 – Mani