www.hj8828.com 2

【www.hj8828.com】Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

一、配置 Router

前言

使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的
href,于是 vue-router 应运而生。

用 vue-cli 创建的初始模板里面,并没有 vue-router,需要通过 npm 安装

使用 Vue.js
做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的
href,于是 vue-router 应运而生。

官方文档:

cnpm i vue-router -D

官方文档:

 

安装完成后,在 src 文件夹下,创建一个 routers.js 文件,和 main.js 平级

这次的实例主要实现下图的效果:

有很多朋友找我要
demo,但是博客中的这个案例被我删掉了,我只好随手写了一个超简单的
demo,希望能有所帮助

然后在 router.js 中引入所需的组件,创建 routers 对象

项目结构:

链接:
密码:79bv

import Home from './components/home.vue'const routers = [ { path: '/home', name: 'home', component: Home }, { path: '/', component: Home },]export default routers

一、配置 Router

 

在创建的 routers 对象中, path 配置了路由的路径,component
配置了映射的组件

用 vue-cli 创建的初始模板里面,并没有 vue-router,需要通过 npm 安装

这次的实例主要实现下图的效果:

需要注意的是,export default routers
必须写在文件底部,而且后面还需要接一空行,否则无法通过 ESlint 语法验证

cnpm i vue-router -D

www.hj8828.com 1

然后 main.js 也需要修改:

安装完成后,在 src 文件夹下,创建一个 routers.js 文件,和 main.js 平级

 

import Vue from 'vue'import VueRouter from 'vue-router'import routers from './routers'import App from './App'Vue.useconst router = new VueRouter({ mode: 'history', routes: routers})new Vue({ el: '#app', router, render: h => h

然后在 router.js 中引入所需的组件,创建 routers 对象

项目结构:

在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash
模式,该模式下会将路径格式化为 #! 开头。

import Home from './components/home.vue'const routers = [ { path: '/home', name: 'home', component: Home }, { path: '/', component: Home },]export default routers

www.hj8828.com 2

添加 mode: ‘history’ 之后将使用 HTML5 history 模式,该模式下没有 #
前缀,而且可以使用 pushState 和 replaceState 来管理记录。

在创建的 routers 对象中, path 配置了路由的路径,component
配置了映射的组件

 

关于 html5 history
模式的更多内容,可以参考官方文档:

需要注意的是:export default routers
必须写在文件底部,而且后面还需要接一空行,否则无法通过 ESlint 语法验证

 

二、嵌套路由

然后 main.js 也需要修改:

一、配置 Router

在这个实例中,为了加深项目层级,App.vue 只是作为一个存放组件的容器:

import Vue from 'vue'import VueRouter from 'vue-router'import routers from './routers'import App from './App'Vue.useconst router = new VueRouter({ mode: 'history', routes: routers})new Vue({ el: '#app', router, render: h => h

 用 vue-cli 创建的初始模板里面,并没有 vue-router,需要通过 npm 安装

其中 是用来渲染通过路由映射过来的组件,当路径更改时,
中的内容也会发生更改

在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash
模式,该模式下会将路径格式化为 #! 开头。

cnpm i vue-router -D

上面已经配置了两个路由,当打开 或者
的时候,就会在 中渲染 home.vue 组件

添加 mode: 'history'之后将使用 HTML5 history 模式,该模式下没有 #
前缀,而且可以使用 pushState 和 replaceState 来管理记录。

安装完成后,在 src 文件夹下,创建一个 routers.js 文件,和 main.js 平级

home.vue 是真正的父组件,first.vue、login.vue 等子组件都会渲染到
home.vue 中的

关于 HTML5 history
模式的更多内容,可以参考官方文档:

www.hj8828.com,然后在 router.js 中引入所需的组件,创建 routers 对象

如此一来,就需要在一级路由中嵌套二级路由,修改 routers.js

二、嵌套路由

import Home from './components/home.vue'

const routers = [
  {
    path: '/home',
    name: 'home',
    component: Home
  },
  {
    path: '/',
    component: Home
  },

]
export default routers
import Home from './components/home.vue'import First from './components/children/first.vue'import Login from './components/children/login.vue'const routers = [ { path: '/', component: Home, children: [ { path: '/', component: Login } ] }, { path: '/home', name: 'home', component: Home, children: [ { path: '/', name: 'login', component: Login }, { path: 'first', name: 'first', component: First } ] }]export default routers

在这个实例中,为了加深项目层级,App.vue 只是作为一个存放组件的容器:

在创建的 routers 对象中, path 配置了路由的路径,component
配置了映射的组件

在配置的路由后面,添加 children,并在 children
中添加二级路由,就能实现路由嵌套

其中 是用来渲染通过路由映射过来的组件,当路径更改时,
中的内容也会发生更改

需要注意的是,export default
routers

必须写在文件底部,而且后面还需要接一空行,否则无法通过 ESlint
语法验证

配置 path 的时候,以 ” / ” 开头的嵌套路径会被当作根路径,所以子路由的
path 不需要添加 ” / “

上面已经配置了两个路由,当打开 或者
的时候,就会在 中渲染 home.vue 组件

 

三、使用 映射路由

home.vue 是真正的父组件,first.vue、login.vue 等子组件都会渲染到
home.vue 中的 “

然后 main.js
也需要修改:

home.vue 中引入了 header.vue 组件,其中含有导航菜单

如此一来,就需要在一级路由中嵌套二级路由,修改 routers.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import routers from './routers'
import App from './App'

Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  routes: routers
})

new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

当点击导航菜单的时候,会切换 home.vue 中 中的内容

import Home from './components/home.vue'import First from './components/children/first.vue'import Login from './components/children/login.vue'const routers = [ { path: '/', component: Home, children: [ { path: '/', component: Login } ] }, { path: '/home', name: 'home', component: Home, children: [ { path: '/', name: 'login', component: Login }, { path: 'first', name: 'first', component: First } ] }]export default routers

在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash
模式,该模式下会将路径格式化为 #! 开头。