vue中的路由详解

Vue干货 小白 暂无评论

简单路由案例



const NotFound = { template: '<p>Page not found</p>' }
const Home = { template: '<p>home page</p>' }
const About = { template: '<p>about page</p>' }

const routes = {
 '/': Home,
 '/about': About
}

new Vue({
 el: '#app',
 data: {
   currentRoute: window.location.pathname
 },
 computed: {
   ViewComponent () {
     return routes[this.currentRoute] || NotFound
   }
 },
 render (h) { return h(this.ViewComponent) }
})

动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用『动态路径参数』(dynamic segment)来达到这个效果:



const User = {
 template: '<div>User</div>'
}


const router = new VueRouter({
 routes: [
   // 动态路径参数 以冒号开头
   { path: '/user/:id', component: User }
 ]
})

现在呢,像 /user/foo 和 /user/bar 都将映射到相同的路由。
一个『路径参数』使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 User 的模板,输出当前用户的 ID:



const User = {
 template: '<div>User {{ $route.params.id }}</div>'
}

响应路由参数的变化

提醒一下,当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。

复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象:



const User = {
 template: '...',
 watch: {
   '$route' (to, from) {
     // 对路由变化作出响应...
   }
 }
}


const User = {
 template: '...',
 beforeRouteUpdate (to, from, next) {
   // react to route changes...
   // don't forget to call next()
 }
}

匹配优先级

有时候,同一个路径可以匹配多个路由,此时,匹配的优先级就按照路由的定义顺序:谁先定义的,谁的优先级就最高。


转载请注明: Vue教程中文网 - 打造国内领先的vue学习网站-vue视频,vue教程,vue学习,vue培训 » vue中的路由详解

喜欢 ()or分享