我发现转换不会在带有参数的动态路由上触发。例如,使用下面的代码,当我在/chapter/1
我去/chapter/2
没有过渡。但当我在/chapter/1
我去/profile/1
有一个 !
main.js
file
require('normalize.css')
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'
import Panel from './components/Panel'
import Profile from './components/Profile'
window.bus = new Vue()
Vue.use(VueRouter)
const router = new VueRouter({
routes: [
{ path: '/', redirect: '/chapter/1' },
{ name:'chapter', path: '/chapter/:id', component: Panel},
{ name:'profile', path: '/profile/:id', component: Profile}
]
})
new Vue({
router,
el: '#app',
render: h => h(App)
})
App.vue
模板
<template>
<div id="app">
<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
<div class="controls">
<router-link :to="{ name: 'chapter', params: { id: Math.max(1, parseInt($route.params.id) - 1) }}">
Prev
</router-link>
<router-link :to="{ name: 'chapter', params: { id: parseInt($route.params.id) + 1 }}">
Next
</router-link>
</div>
</div>
</template>
也许是因为 vue-router 不会破坏父组件?我没有找到从代码运行转换的方法。我尝试了这个配置vue-router 示例包并且行为是相同的。
引用自doc
使用带有参数的路由时需要注意的一件事是,当用户从 /user/foo 导航到 /user/bar 时,将重用相同的组件实例。由于两条路由渲染相同的组件,因此这比销毁旧实例然后创建新实例更有效。然而,这也意味着组件的生命周期钩子不会被调用。
要对同一组件中的参数更改做出反应,您可以简单地观察 $route 对象
我应该发布问题吗?
感谢您的帮助 !