你的問題可能是如何“重新整理”當前頁面
當使用路由引數時,例如從 /user/foo 導航到 /user/bar,原來的元件例項會被複用。
因為兩個路由都渲染同個元件,比起銷燬再建立,複用則顯得更加高效。
不過,這也意味著元件的生命週期鉤子不會再被呼叫。
複用元件時,想對路由引數的變化作出響應的話,$route.push無效,你可以簡單地 watch (監測變化) $route 物件:
const User = {
template: "...",
watch: {
"$route" (to, from) {
// 對路由變化作出響應...
}
或者使用 2.2 中引入的 beforeRouteUpdate 導航守衛:
beforeRouteUpdate (to, from, next) {
// react to route changes...
// don"t forget to call next()
如何是重新整理當前頁面的話可使用先push到一個空頁再push回來,但是這個方案回導致一個空白效果,常用的是再app.vue定義一個reload方法,再子頁面中呼叫
// app.vue
<template>
<router-view v-if="isRouterAlive"></router-view>
</template>
<script>
export default {
name: "App",
provide() {
return {
routerReload: this.reload
};
},
data() {
isRouterAlive: true
methods: {
reload() {
this.isRouterAlive = false;
this.$nextTick(() => (this.isRouterAlive = true));
</script>
// 頁面
inject: ["routerReload"],
reload(){
this.routerReload()
你的問題可能是如何“重新整理”當前頁面
當使用路由引數時,例如從 /user/foo 導航到 /user/bar,原來的元件例項會被複用。
因為兩個路由都渲染同個元件,比起銷燬再建立,複用則顯得更加高效。
不過,這也意味著元件的生命週期鉤子不會再被呼叫。
複用元件時,想對路由引數的變化作出響應的話,$route.push無效,你可以簡單地 watch (監測變化) $route 物件:
const User = {
template: "...",
watch: {
"$route" (to, from) {
// 對路由變化作出響應...
}
}
}
或者使用 2.2 中引入的 beforeRouteUpdate 導航守衛:
const User = {
template: "...",
beforeRouteUpdate (to, from, next) {
// react to route changes...
// don"t forget to call next()
}
}
如何是重新整理當前頁面的話可使用先push到一個空頁再push回來,但是這個方案回導致一個空白效果,常用的是再app.vue定義一個reload方法,再子頁面中呼叫
// app.vue
<template>
<router-view v-if="isRouterAlive"></router-view>
</template>
<script>
export default {
name: "App",
provide() {
return {
routerReload: this.reload
};
},
data() {
return {
isRouterAlive: true
};
},
methods: {
reload() {
this.isRouterAlive = false;
this.$nextTick(() => (this.isRouterAlive = true));
}
}
};
</script>
// 頁面
export default {
inject: ["routerReload"],
methods: {
reload(){
this.routerReload()
}
}
}