github项目地址请点这里。html
使用 Vue.js 时,咱们就已经把组件组合成一个应用了,当咱们要把 vue-router 加进来,只须要配置组件和路由映射,而后告诉 vue-router 在哪里渲染它们。vue
先来看一下官方提供的最简单的例子:webpack
<script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> <div id="app"> <h1>Hello App!</h1> <p> <!-- 使用 router-link 组件来导航. --> <!-- 经过传入 `to` 属性指定连接. --> <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 --> <router-link to="/foo">Go to Foo</router-link> <router-link to="/bar">Go to Bar</router-link> </p> <!-- 路由出口 --> <!-- 路由匹配到的组件将渲染在这里 --> <router-view></router-view> </div>
从HTML文件里面咱们须要学会的是:git
// 0. 若是使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter) // 1. 定义(路由)组件。 // 也能够从其余文件 import 进来 const Foo = { template: '<div>foo</div>' } const Bar = { template: '<div>bar</div>' } // 2. 定义路由 // 每一个路由应该映射一个组件。 其中"component" 能够是 // 经过 Vue.extend() 建立的组件构造器, // 或者,只是一个组件配置对象。 const routes = [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar } ] // 3. 建立 router 实例,而后传 `routes` 配置 // 你还能够传别的配置参数, 不过先这么简单着吧。 const router = new VueRouter({ routes // (缩写)至关于 routes: routes }) // 4. 建立和挂载根实例。 // 记得要经过 router 配置参数注入路由, // 从而让整个应用都有路由功能 const app = new Vue({ router }).$mount('#app') // 如今,应用已经启动了!
JavaScript文件主要作的事情是:github
以上只是教咱们用最简单的方法使用vue-router。但实际开发过程当中,首先咱们的vue组件显然不会只有一个template模板这么简单,会用到vue的单文件组件;其次咱们一般会但愿<router-view>的范围是整个页面,而不是像如今这样一直有几个碍眼的导航存在于页面上,这就须要先定义好默认状态下<router-view>显示的内容。web
既然是单页应用(SPA),那么整个项目有如下三个文件是必要的:vue-router
另外还有两个自定义组件:homepage.vue和chat.vue。咱们但愿的结果是他们之间互相跳转。vuex
下面看下这几个文件的具体内容:编程
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Vue.js v2</title> </head> <body> <!--由于咱们用App.vue做为根组件,这里只须要写一个渲染用的挂载元素#application便可--> <div id="application"></div> <!--这里的dist目录是webpack打包后的js文件的路径--> <script src="dist/main.js"></script> </body> </html>
这里咱们选择把路由配置也写到main.js中,你也能够写到一个单独的router.js中再引入到main.js中。segmentfault
//引入vue、vue-router和根组件app.vue import Vue from 'vue' import VueRouter from 'vue-router' import App from './components/app.vue' Vue.use(VueRouter) // 引入自定义组件 import HomePage from './components/homepage.vue' import Chat from './components/chat/chat.vue' //定义路由 const routes = [ //这里 path: '/' 表明应用首页显示的内容 { path: '/', component: HomePage }, { path: '/chat', component: Chat } ]; //建立router实例 const router = new VueRouter({ //mode指定路由模式,默认'hash',另外一种可选的模式是'history' mode: 'hash', routes, }); new Vue({ el: '#application', router, render: h => h(App) //用render函数渲染引入的组件App.vue到index.html中的#application元素中 })
<template lang="html"> <div id="app"> <!--这里是组件的渲染区域--> <router-view></router-view> </div> </template> <script> export default { data () { return { } }, } </script>
这个组件的内容也是进入应用默认展现的页面内容。
<template> <div> <h1>homepage</h1> <router-link to="/chat">Go to chat</router-link> </div> </template>
<template> <div> <h1>Chat</h1> <router-link to="/">Go to homepage</router-link> </div> </template>
写完后你会发现这两个页面是互相跳转的,没错,就是这样。
通常咱们会把路由信息routes提取到一个单独的文件中,像这样:
route-config.js:
import HomePage from './components/homepage.vue' import Chat from './components/chat/chat.vue' export default [ { path: '/', component: HomePage }, { path: '/chat', component: Chat } ];
而后在main.js
中引入: import routes from './route-config.js'
就能够了。