【发布时间】:2017-03-01 10:20:18
【问题描述】:
我发现转换没有在带有参数的动态路由上触发。例如下面的代码,当我在/chapter/1 并转到/chapter/2 时,没有转换。但是当我在/chapter/1 并且我去/profile/1 时,有一个!
main.js文件
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 example pack 上试过这个配置,行为是一样的。
引用doc
在使用带参数的路由时需要注意的一点是,当用户从 /user/foo 导航到 /user/bar 时,将重复使用相同的组件实例。由于两条路由都渲染相同的组件,因此这比销毁旧实例然后创建新实例更有效。但是,这也意味着组件的生命周期钩子不会被调用。
要对同一组件中的参数变化做出反应,您可以简单地观察 $route 对象
我应该发布问题吗?
感谢您的帮助!
【问题讨论】:
标签: javascript transition vue.js vue-router