Vue从入门到实战:命名路由

来自CloudWiki
跳转至: 导航搜索

背景

有时通过一个名称来标识路由会更方便。

可以在创建Router实例的时候,在routes选项中为路由设置名称。

前置知识:Vue从入门到实战:感受前端路由Vue从入门到实战:嵌套路由

实例

修改router目录下的index.js

路由router

router/index.js

添加根路径(/)的路由配置,并为其他路由取个名字。

import Vue from 'vue'
import VueRouter from 'vue-router'  // 导入vue-router
import News from '@/components/News'
import Books from '@/components/Books'
import Videos from '@/components/Videos'
import Book from '@/components/Book'

Vue.use(VueRouter)  //安装vue-router插件

// 将VueRouter实例作为模块的默认导出
const router = new VueRouter({

  routes: [
    {
      path: '/',
      redirect: {
        name: 'news'
      }
    },
		{
      path: '/news',
			name: 'news',
      component:News
    },
    
    {
      path: '/videos',
			name: 'videos',
      component:Videos
    },

    {
      path: '/books',
			name: 'books',
      component: Books,
			children:[
				{path: '/book/:id', name: 'book',component:Book}
			]
		},
		
		
  ]
})

export default router;

在根路径(/)的配置中,使用redirect参数将对该路径的访问重定向到命名的路由news上。

当访问http://localhost:8080 时,将直接跳转到News组件。

App.vue

修改App.vue,在设置导航链接时使用命名路由。

<template>
  <div id="app">
    <p>
    
      <router-link :to="{ name: 'news'}">新闻</router-link>
			<router-link :to="{ name: 'books'}">图书</router-link>
			<router-link :to="{ name: 'videos'}">视频</router-link>

    </p>
    <router-view></router-view>
    
  </div>
</template>

<script>
export default {
  name: 'app',
  components: {
  }
}
</script>


注意,to属性的值现在也是表达式,因此需要使用v-bind指令。

Components

修改Books.vue 也使用命名路由

...
        <ul>
            <li v-for="book in books" :key="book.id">
                
                <router-link :to="{name: 'book', params: { id: book.id }}">{{book.title}}</router-link>
              

            </li>
        </ul>
...

接下来再次运行项目,测试效果和前面完全一样。

注:在路由配置中,还可以为某个路径取个别名

 
 routes:[
  { path:'/a',component:A,alias: '/b' }
]

当使用别名时,URL会保持为'/b',但是后台路由匹配为'/a'

注意别名和重定向的区别。