一、项目初始化
创建webpack模板项目如下所示:
MacBook-Pro:PycharmProjects hqs$ vue init webpack luffy_project ? Project name luffy_project ? Project description A Vue.js project ? Author hqs ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your code? No ? Set up unit tests No ? Setup e2e tests with Nightwatch? No ? Should we run `npm install` for you after the project has been created? (recommended) npm vue-cli · Generated "luffy_project".
根据提示启动项目:
$ cd luffy_project/ $ npm run dev
由于在初始化时选择了vue-router,因此会自动创建/src/router/index.js文件。
删除Helloworld组件相关信息后,index.js文件内容如下所示:
import Vue from 'vue' import Router from 'vue-router' // @绝对路径 检索到 ...src/ // 如果Router当做局部模块使用一定要Vue.use(Router) // 以后在组件中,可以通过this.$router 获取Router实例化对象 // 路由信息对象 this.$routes 获取路由配置信息 Vue.use(Router) // 配置路由规则 export default new Router({ routes: [ { 'path': '/' } ] })
二、基于ElementUI框架实现导航栏
1、elementUI——适合Vue的UI框架
elementUI是一个UI库,它不依赖于vue,但确是当前和vue配合做项目开发的一个比较好的UI框架。
(1)npm安装
推荐使用 npm 的方式安装,能更好地和 webpack 打包工具配合使用。
$ npm i element-ui -S
(2)CDN
目前可以通过 unpkg.com/element-ui 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用。
(2)按需引入
借助 babel-plugin-component,可以只引入需要的组件,以达到减小项目体积的目的。
首先安装babel-plugin-component:
$ npm install babel-plugin-component -D然后将.babelrc文件修改如下:
{ "presets": [["es2015", { "modules": false }]], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] }如果只希望引入部分组件,如Buttion何Select,那么需要在 main.js 中写如下内容:
import Vue from 'vue'; import { Button, Select } from 'element-ui'; import App from './App.vue'; Vue.component(Button.name, Button); Vue.component(Select.name, Select); /* 或写为 * Vue.use(Button) * Vue.use(Select) */ new Vue({ el: '#app', render: h => h(App) });3、导航栏实现
首先创建/src/components/Common/LuffyHeader.vue文件:
三、导航栏路由跳转
1、组件创建和路由配置编写
添加“首页”、“免费课程”、“轻课”、“学位课”四大组件,因此创建如下文件:
src/components/Home/Home.vue src/components/Course/Course.vue src/components/LightCourse/LightCourse.vue src/components/Micro/Micro.vue在src/router/index.js中引入组件,配置路由规则:
import Vue from 'vue' import Router from 'vue-router' // @绝对路径 检索到 ...src/ // 如果Router当做局部模块使用一定要Vue.use(Router) // 以后在组件中,可以通过this.$router 获取Router实例化对象 // 路由信息对象 this.$routes 获取路由配置信息 import Home from '@/components/Home/Home' import Course from '@/components/Course/Course' import LightCourse from '@/components/LightCourse/LightCourse' import Micro from '@/components/Micro/Micro' Vue.use(Router) // 配置路由规则 export default new Router({ routes: [ { path: '/', redirect: '/home' // 访问/,直接跳转到/home路径 }, { path: '/home', name: 'Home', component: Home }, { path: '/course', name: 'Course', component: Course }, { path: '/home/light-course', name: 'LightCourse', component: LightCourse }, { path: '/micro', name: 'Micro', component: Micro } ] })2、导航链接编写
修改 LuffyHeader.vue页面,编写导航链接:
3、router-link路由跳转
经过上面的编写,虽然导航栏已经可以正常显示,但是a标签是不会做自动跳转的。 需要使用 router-link 进一步改写LuffyHeader.vue,使得路由跳转得以渲染对应组件:
可以看到虽然点击了轻课,但是和其他导航项样式没有任何分别,需要设置路由active样式完成优化。
4、linkActiveClass设置路由的active样式
linkActiveClass 全局配置
的默认“激活 class 类名”。 active-class 设置 链接激活时使用的 CSS 类名。默认值可以通过路由的构造选项 linkActiveClass 来全局配置。
(1)在路由配置linkActiveClass
在 src/router/index.js 中做如下配置:
import Vue from 'vue' import Router from 'vue-router' // @绝对路径 检索到 ...src/ // 如果Router当做局部模块使用一定要Vue.use(Router) // 以后在组件中,可以通过this.$router 获取Router实例化对象 // 路由信息对象 this.$routes 获取路由配置信息 import Home from '@/components/Home/Home' import Course from '@/components/Course/Course' import LightCourse from '@/components/LightCourse/LightCourse' import Micro from '@/components/Micro/Micro' Vue.use(Router) // 配置路由规则 export default new Router({ linkActiveClass: 'is-active', routes: [ { path: '/', redirect: '/home' // 访问/,直接跳转到/home路径 }, ...... { path: '/micro', name: 'Micro', component: Micro } ] })(2)在LuffyHeader.vue中配置路由active样式
......省略(3)显示效果
5、hash模式切换为 history 模式
vue-router 默认 hash 模式——使用URL的hash来模拟一个完整的URL,于是当URL改变时,页面不会重新加载。比如http://www.abc.com/#/index,hash值为#/index。hash模式的特点在于hash出现在url中,但是不会被包括在HTTP请求中,对后端没有影响,不会重新加载页面。
如果不想要这种显示比较丑的hash,可以用路由的 history模式,这种模式充分利用 history.pushState API来完成URL跳转而无需重新加载页面。
(1)路由修改为history模式
修改 src/router/index.js 文件如下所示:
import Vue from 'vue' import Router from 'vue-router' // @绝对路径 检索到 ...src/ // 如果Router当做局部模块使用一定要Vue.use(Router) // 以后在组件中,可以通过this.$router 获取Router实例化对象 // 路由信息对象 this.$routes 获取路由配置信息 import Home from '@/components/Home/Home' import Course from '@/components/Course/Course' import LightCourse from '@/components/LightCourse/LightCourse' import Micro from '@/components/Micro/Micro' Vue.use(Router) // 配置路由规则 export default new Router({ linkActiveClass: 'is-active', mode: 'history', // 改为history模式 routes: [ { path: '/', redirect: '/home' // 访问/,直接跳转到/home路径 }, ..... ] })使用history模式时,url就像正常url,例如http://yoursite.com/user/id,这样比较美观。
显示效果如下所示:
(2)后端配置
但是要用好这种模式,需要后台配置支持。vue的应用是单页客户端应用,如果后台没有正确的配置,用户在浏览器访问http://yoursite.com/user/id 就会返回404,这样就不好了。
因此要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是app依赖的页面。
后端配置示例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
如何解决《如何从方法中打印指针的值?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在C中安全二进制搜索》经验,为你挑选了1个好方法。 ... [详细] 如何解决《匹配列表后修复类型擦除》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Object.wait()超过了超时》经验,为你挑选了1个好方法。 ... [详细] 如何解决《强制SQLServer查询不返回任何行》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何从COBOL中的COMP-3字段读取Java中的日期?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《WinSCP.NET程序集:如何下载目录》经验,为你挑选了0个好方法。 ... [详细] 如何解决《确定最大开放空间的高效算法》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如果孩子的总数是偶数,如何将样式添加到倒数第二?》经验,为你挑选了2个好方法。 ... [详细] 如何解决《Jupyter和CommonLisp》经验,为你挑选了1个好方法。 ... [详细] 如何解决《即时添加/删除组件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《滚动淡出div》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何按顺序刷新IPythonNotebook中的图?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《扩展"读取"式行为》经验,为你挑选了1个好方法。 ... [详细] 如何解决《将前导零添加到varchar字段》经验,为你挑选了2个好方法。 ... [详细] 如何解决《在swift中将阴影应用于导航栏》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何调试ReactRouter?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《更快地解析代码文件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《让Spark,Java和MongoDB协同工作》经验,为你挑选了0个好方法。 ... [详细] 如何解决《记录Tomcat服务器的所有HTTP请求?》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1Node.js:如何远程调试?
- 2android中的每个活动都有自己的上下文吗?在单个应用程序中具有多个活动的方案是什么
- 3在R中替换第一次出现的":"而不是第二次
- 4在Windows 10应用程序中获取WiFi适配器列表失败
- 5带有"not character"的正则表达式与预期不匹配
- 6Android Studio如何启动垃圾收集器以及它如何工作?
- 7Go - ReverseProxy到Apache代理错误:x509:由未知权限签名的证书
- 8如何在CEKEditor中添加自定义html标签?
- 9在namedtuple中输入提示
- 10按MongoDB中的子字符串对值进行分组
- 11当我动态更改html时,ng-click in ng-bind-html不会触发
- 12重定向后如何在链接上设置活动类?
- 13meteor mongo驱动程序可以处理$ each和$ position运算符吗?
- 14在c ++中将char转换为string
- 15使用SHA ID修改旧提交的评论消息
- 16AMD Loader禁用,在主题中启用
- 17FileOutputStream将编码设置为utf-8
- 18如何动态地将类添加到焦点输入字段的父div?
- 19Webpack UglifyJS删除死代码,但不要最小化代码
- 20WCF - CMS中具有Web控件的客户端安全性
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有