vue 2 + vue-router 2 实现SPA

2017-01-12 09:53:21来源:作者:SegmentFault人点击

使用 Vue.js 时,我们就已经把组件组合成一个应用了,当我们要把 vue-router 加进来,只需要配置组件和路由映射,然后告诉 vue-router 在哪里渲染它们。

先来看一下官方提供的最简单的例子:

HTML <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文件里面我们需要学会的是:

<router-link>标签是我们要跳转的链接,to=""是必须的属性,双引号中的内容是我们接下来在JS文件中定义的路由path。

<router-view>标签是展示我们匹配到的组件的区域。

JavaScript // 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文件主要做的事情是:

定义路由列表,即routes。

创建router实例及router配置,即router。

创建和挂载根实例。

以上只是教我们用最简单的方法使用vue-router。但实际开发过程中,首先我们的vue组件显然不会只有一个template模板这么简单,会用到vue的 单文件组件;其次我们通常会希望<router-view>的范围是整个页面,而不是像现在这样一直有几个碍眼的导航存在于页面上,这就需要先定义好默认状态下<router-view>显示的内容。

既然是单页应用(SPA),那么整个项目有以下三个文件是必要的:

一个html文件:index.html

一个webpack打包时的入口js文件:main.js

一个根vue组件,作为其他组件的挂载点:app.vue

另外还有两个自定义组件:notfound.vue和chat.vue。我们希望的结果是他们之间互相跳转。

下面看下这几个文件的具体内容:

index.html <!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> <div id="app"> <!--这里是组件的渲染区域--> <router-view></router-view> </div> <!--这里的dist目录是webpack打包后的js文件的路径--> <script src="dist/main.js"></script></body></html> main.js

这里我们选择把路由配置也写到main.js中,你也可以写到一个单独的router.js中再引入到main.js中。

//引入vue、vue-router和根组件app.vueimport Vue from 'vue'import VueRouter from 'vue-router'import App from './components/app.vue'Vue.use(VueRouter)// 引入自定义组件import NotFound from './components/notfound.vue'import Chat from './components/chat/chat.vue'const router = new VueRouter({ //mode指定路由模式,默认'hash',另一种可选的模式是'history' mode: 'hash', component: App, routes: [ //这里 path: '/' 代表应用首页显示的内容 { path: '/', component: NotFound }, { path: '/chat', component: Chat } ]});new Vue({ el: '#app', router: router}).$mount('#app') app.vue <template lang="html"> <div id="app"></div></template><script>export default { data () { return { } },}</script> 自定义组件 notfound.vue

这个组件的内容也是进入应用默认展示的页面内容。

<template> <div> <h1>404</h1> <router-link to="/chat">Go to chat</router-link> </div></template> 自定义组件 chat.vue <template> <div> <h1>Chat</h1> <router-link to="/">Go to notfound</router-link> </div></template>

写完后你会发现这两个页面是互相跳转的,没错,就是这样。

参考文献:

vue-router 2官方文档: http://router.vuejs.org/zh-cn/

Vue-router2.0学习笔记: https://segmentfault.com/a/11...

vue2.0构建单页应用最佳实战: https://segmentfault.com/a/11...

一个完整的vue应用 ( vuex+vue-router ) 起手: https://segmentfault.com/a/11...

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台