承接上文vue2.0一块儿在懵逼的海洋里越陷越深(一)css
在上一篇里已经将vue2.0须要的依赖都装齐了
那么接下来html
由于vue最后生成的页面看似静态页面(对于静态页面这里有些偷鸡用法,无论你怎样,反正我已经露出了诡异的微笑?,再贴一个vue2.0 demo的项目地址,大爷有兴趣可进去看看演示,开心了就加个星),其实倒是个SPA(单页面应用)
没错!就是一个SPA前端
SPA与传统网页区别的地方是SPA具备前端路由来模拟页面跳转,固然这是众多不一样之一,这篇只说前端路由。
上一篇中有安装vue-router组件,这个就是vue的前端路由
vue + vue-router简直是爽,页面跳转的速度简直是不要不要的
不光是用户体验上的提高,做为一名开发者,在使用了如vue,react等这类MVVM框架后,就不会再想回到jQuery的时代了。vue
好的,用本身的小编辑器打开vue项目(我用的是sublime)
能够看到项目目录是这样子的react
(插一句,若是喜欢这个sublime主题能够查看这篇文章)
与本身的目录对比发现少几个文件,那是没有什么关系的,接下来要作的就是去建立这些文件。git
从目录图片里能够看到main.js
这个文件,没错这个就是程序的入口
这个文件的内容是这样的github
import Vue from 'vue' import router from './router' import App from './App' /* eslint-disable no-new */ new Vue({ router, render: h => h(App) }).$mount('#app')
main.js
地址
这里用的是ES6的语法,使用import
来导入包
这里导入了vue包,还有两个文件,分别是router.js
和App.vue
.js
后缀是能够省略的(毕竟是亲生的,你不说导入什么类型的文件,确定是自家人毕竟亲呀)
其实.vue
后缀也是能够省略的,我建议仍是写一下,若是遇到两个同名文件就尴尬了。vue-router
好的,这个router.js
就是路由的输出口啦,App.vue
就是目录里已经存在的那个模板文件啦,你的界面就从这里开始啦。
引入了包就能够开始设置路由和挂载模板了shell
顺带一提,能够看到在new Vue()
时传入了一个对象,可是这个对象却不是键值对,
是这样,这是ES6的一种语法,当引用的变量名和键名相同时,就能够简写成这样
若是还原来是这样的npm
new Vue({ router: router, render: h => h(App) }).$mount('app') // 被简写成了 new Vue({ router, // 这是ES6对象的简写,扩展开就是router: router // 箭头函数(=>)是ES6的新语法 render: h => h(App) // 这里扩展开就是render: (h) => { return h(App) } }).$mount('app')
PS:ES6的新语法如今网上文章已经有不少了,我以后也会发一版经常使用的语法
router.js
文件内容是这样的:
import Vue from 'vue' import VueRouter from 'vue-router' import routes from './routes' // 告诉vue要使用router Vue.use(VueRouter) /* eslint-disable no-new */ // 实例化router对象 const router = new VueRouter({ mode: 'hash', // 设置路由模式 可选值: "hash" | "history" | "abstract",默认"hash" linkActiveClass: 'u-link--Active', // 这是连接激活时的class // base: '/app/', // 这个是设置根目录路径,通常用不到,默认'/' routes // 挂载路由集合 后面会说 }) // 导出router对象 export default router
这是router.js
地址
这里引入了两个包vue
,vue-router
和一个包含路由集合的routes.js
文件
整个文件的逻辑就是,使用Vue.use()
方法告诉vue咱们使用了路由
而后就大大方方的导出路由对象
这个时候main.js
里就能够接受到这里导出的路由对象,并挂载到vue对象上
routes.js
文件routes.js
是用来放置路由集合的文件
其实路由集合是能够写在router.js
里的,这里为何不写在一块儿呢?
由于当路由集合变得庞大时,若是仍是写在router.js
里,就会显得拥挤,不便于阅读
因此这里推荐单独写出来。
同时呢也能够建立路由所对应的模板文件(.vue
文件,我把它称为模板文件),Article.vue
和Home.vue
模板文件叫什么名由本身决定,因而就能看到这张图里全部文件都齐了
那么在编写routes.js
文件以前,须要先写好两个模板的内容(否则一会有没有成功都不清楚了,23333)
好的,贴一下home.vue
的内容
<template lang="pug"> .home h1.l-ta--c Material Desgin </template> <script> export default { data () { return { } } } </script> <style lang="stylus"> </style>
vue模板是html结构的,这也是对界面编写最友好的方式
里面的<template> </template>
标签就是视图<script></script>
就是js,这个没有争议<style></style>
是写css的,这个也没有问题
可是当仔细看个人代码,发现里面html使用了pug,css使用了stylus
其实不用他们也是可行的,只是用pug和stylus写结构比较清晰
不用也能够的
若是要使用,请打开你的终端,给项目添加几个包
npm i pug stylus stylus-loader -D
里面的css的class(.l-ta--c
)看着有点懵逼的,能够看看使用BEM+emmet的css书写与命名技巧
好的,模板不须要太复杂,只要有字能显示就行了,至于Article.vue
也是同样的,这里就不贴了
Tips:模板里推荐有一个根元素,就像这里的.home
就是根元素,这样不容易混乱,结构会清晰
routes.js
了先贴代码!
// 导入以前写好的两个模板 import Home from './components/Home.vue' import Article from './components/Article.vue' // 编写路由集合 const routes = [ { name: 'Home', // 路由名,这个字段是可选的 path: '/', // 路由路径,这里是根路径因此是'/' component: Home // 模板 }, // 这些是经常使用的 { name: 'Article', path: '/article', component: Article } ] // 导出路由集合 export default routes
而后是文件地址
最后导出了路由集合(routes
)后就能够在router.js
里使用了
因而,前面的router.js
里的routes
就有了。
App.vue
里添加路由代码以下:
<template lang="pug"> .app header //- 制做一个跳转连接 //- 这里不要直接用a连接跳转,那样会致使页面重载, //- 相比之下用router-link是高效的方案 //- to属性就是连接的地址啦 router-link(to="/") home router-link(to="/article") article bodyer //- 路由地址所对应的模板将会被挂载到router-view标签上 router-view </template> <script> export default { data () { return { } } } </script> <style lang="stylus"> </style>
地址好了,到此为止就完成了路由搭建与使用了。