创建导航页组件

在components目录下新建一个navigation目录,在Navi目录中新建一个名为Navi.vue的组件。至此我们的目录应该是如下图所示:

然后我们修改main.js文件,修改后的文件如下

  1. import Vue from 'vue'
  2. //import App from './App'
  3. import router from './router'
  4. import ElementUI from 'element-ui';
  5. import 'element-ui/lib/theme-chalk/index.css';
  6. import Navi from './components/navigation/Navi.vue'
  7.  
  8. Vue.use(ElementUI);
  9.  
  10. Vue.config.productionTip = false
  11.  
  12. /* eslint-disable no-new */
  13. // new Vue({
  14. // el: '#app',
  15. // router,
  16. // components: { App },
  17. // template: '<App/>'
  18. // })
  19.  
  20. new Vue({
  21. el: '#app',
  22. router,
  23. render: h => h(Navi)
  24. })

我们可以看到render函数的参数由之前的App变为我们新创建的Navi组件。从此我们的程序入口中显示的就是这个Navi.vue里面的内容。之前默认生成的App.vue文件已经无用,我们可以删掉它。 接下来我们对导航页进行简单的布局,我们先来看一下布局的代码

Navi.vue

  1. <template>
  2. <div style="background-color: #EBEBEB;min-height:800px">
  3. <div style="width:100%;background-color: #636363; overflow: hidden">
  4. <span class="demonstration" style="float:left;padding-top:10px;color:white;margin-left:1%">
  5. 网站首页
  6. </span>
  7. <span class="demonstration" style="float:left;padding:5px;color:white;margin-left:2%;width:15%">
  8. <el-input
  9. placeholder="请输入"
  10. icon="search"
  11. v-model="searchCriteria"
  12. :on-icon-click="handleIconClick">
  13. </el-input>
  14. </span>
  15. <span class="demonstration" style="float:right;padding-top:10px;margin-right:1%">
  16. <el-dropdown trigger="click">
  17. <span class="el-dropdown-link" style="color:white">
  18. admin<i class="el-icon-caret-bottom el-icon--right"></i>
  19. </span>
  20. <el-dropdown-menu slot="dropdown">
  21. <el-dropdown-item>个人信息</el-dropdown-item>
  22. <el-dropdown-item>退出登录</el-dropdown-item>
  23. </el-dropdown-menu>
  24. </el-dropdown>
  25. </span>
  26. </div>
  27.  
  28. <div style="margin-top:5px">
  29. <el-row :gutter="10">
  30. <el-col :xs="4" :sm="4" :md="4" :lg="4">
  31. <div>
  32. <el-menu default-active="1" class="el-menu-vertical-demo" style="min-height:800px">
  33. <el-menu-item index="1"><i class="el-icon-message"></i>导航一</el-menu-item>
  34. <el-menu-item index="2"><i class="el-icon-menu"></i>导航二</el-menu-item>
  35. <el-menu-item index="3"><i class="el-icon-setting"></i>导航三</el-menu-item>
  36. </el-menu>
  37. </div>
  38. </el-col>
  39. <el-col :xs="20" :sm="20" :md="20" :lg="20">
  40. <div>
  41. <div style="border: 1px solid #A6A6A6; border-radius:6px; padding:5px; margin:2px; background-color: white">
  42. <el-breadcrumb separator="/">
  43. <el-breadcrumb-item v-for="item in breadcrumbItems" :key="item.id">{{item}}</el-breadcrumb-item>
  1. </el-breadcrumb>
  2. </div>
  3. </div>
  4. </el-col>
  5. </el-row>
  6. </div>
  7. </div>
  8. </template>
  9. <script type="text/ecmascript-6">
  10. export default {
  11. data(){
  12. return {
  13. searchCriteria: '',
  14. breadcrumbItems: ['导航一'],
  15. }
  16. },
  17.  
  18. methods:{
  19. handleIconClick(ev) {
  20. console.log(ev);
  21. }
  22. },
  23. }
  24. </script>

启动项目

我们可以看一下主页现在的样子

这里面用到了一些ElementUI的组件,比如左侧的菜单栏,和右侧显示着“导航一”的面包屑组件等。使用el-row和el-col的作用是对组件进行响应式处理。这些组件的详细使用方法都可以在ElementUI的官方网站中找到。

配置路由信息
创建好了首页导航栏之后,我们需要对路由信息进行配置,vue-router是vuejs单页面应用的关键。在配置路由信息之前,我们先把需要跳转到的页面创建出来。我们首先在src目录下创建pageview并在其下创建三个新组件:page1、page2和page3,分别在里面加入一行字,例如page1

  1. <template>
  2. <div>
  3. 这是第一个页面
  4. </div>
  5. </template>
  6. <script type="text/ecmascript-6">
  7. export default {
  8. data(){
  9. return {}
  10. }
  11. }
  12. </script>

page2和page3分别写“这是第二个页面”、“这是第三个页面”。 
这三个页面就代表了我们写的三个要跳转的页面。接下来我们使用

修改router目录下的index.js就是vue-router的配置文件。我们在这个文件中加入如下代码:

  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. import HelloWorld from '@/components/HelloWorld'
  4. import Page1 from '@/pageview/Page1.vue'
  5. import Page2 from '@/pageview/Page2.vue'
  6. import Page3 from '@/pageview/Page3.vue'
  7.  
  8. Vue.use(Router)
  9.  
  10. const router = new Router({
  11. routes: [
  12. {
  13. path: '/',
  14. name: 'HelloWorld',
  15. component: HelloWorld
  16. },
  17. {
  18. path: '/page1',
  19. name: 'Page1',
  20. component: Page1
  21. },
  22. {
  23. path: '/page2',
  24. name: 'Page2',
  25. component: Page2
  26. },
  27. {
  28. path: '/page3',
  29. name: 'Page3',
  30. component: Page3
  31. },
  32. ]
  33. })
  34.  
  35. export default router;

这里就是对跳转路径的配置。然后修改main.js

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. //import App from './App'
  5. //import router from './router'
  6. import ElementUI from 'element-ui';
  7. import 'element-ui/lib/theme-chalk/index.css';
  8. import Navi from './components/navigation/Navi.vue'
  9.  
  10. import router from './router/index'
  11.  
  12. Vue.use(ElementUI);
  13.  
  14. Vue.config.productionTip = false
  15.  
  16. /* eslint-disable no-new */
  17. // new Vue({
  18. // el: '#app',
  19. // router,
  20. // components: { App },
  21. // template: '<App/>'
  22. // })
  23.  
  24. new Vue({
  25. el: '#app',
  26. router,
  27. render: h => h(Navi)
  28. })

这样我们的router就可以全局使用了。 
接下来我们修改Navi.vue, 
修改后的文件如下:

  1. <template>
  2. <div style="background-color: #EBEBEB;min-height:800px">
  3. <div style="width:100%;background-color: #636363; overflow: hidden">
  4. <span class="demonstration" style="float:left;padding-top:10px;color:white;margin-left:1%">
  5. 网站首页
  6. </span>
  7. <span class="demonstration" style="float:left;padding:5px;color:white;margin-left:2%;width:15%">
  8. <el-input
  9. placeholder="请输入"
  10. icon="search"
  11. v-model="searchCriteria"
  12. :on-icon-click="handleIconClick">
  13. </el-input>
  14. </span>
  15. <span class="demonstration" style="float:right;padding-top:10px;margin-right:1%">
  16. <el-dropdown trigger="click">
  17. <span class="el-dropdown-link" style="color:white">
  18. admin<i class="el-icon-caret-bottom el-icon--right"></i>
  19. </span>
  20. <el-dropdown-menu slot="dropdown">
  21. <el-dropdown-item>个人信息</el-dropdown-item>
  22. <el-dropdown-item>退出登录</el-dropdown-item>
  23. </el-dropdown-menu>
  24. </el-dropdown>
  25. </span>
  26. </div>
  27.  
  28. <div style="margin-top:5px">
  29. <el-row :gutter="10">
  30. <el-col :xs="4" :sm="4" :md="4" :lg="4">
  31. <div>
  32. <el-menu default-active="1" class="el-menu-vertical-demo" style="min-height:800px" @select="handleSelect">
  33. <el-menu-item index="1"><i class="el-icon-message"></i>导航一</el-menu-item>
  34. <el-menu-item index="2"><i class="el-icon-menu"></i>导航二</el-menu-item>
  35. <el-menu-item index="3"><i class="el-icon-setting"></i>导航三</el-menu-item>
  36. </el-menu>
  37. </div>
  38. </el-col>
  39. <el-col :xs="20" :sm="20" :md="20" :lg="20">
  40. <div>
  41. <div style="border: 1px solid #A6A6A6; border-radius:6px; padding:5px; margin:2px; background-color: white">
  42. <el-breadcrumb separator="/">
  43. <el-breadcrumb-item v-for="item in breadcrumbItems" :key="item.id">{{item}}</el-breadcrumb-item>
  44. </el-breadcrumb>
  45. </div>
  46. </div>
  47.  
  48. <div style="margin-top:10px">
  49. <router-view></router-view>
  50. </div>
  51. </el-col>
  52. </el-row>
  53. </div>
  54. </div>
  55. </template>
  56. <script type="text/ecmascript-6">
  57. export default {
  58. data(){
  59. return {
  60. searchCriteria: '',
  61. breadcrumbItems: ['导航一'],
  62. }
  63. },
  64.  
  65. methods:{
  66. handleIconClick(ev) {
  67. console.log(ev);
  68. },
  69.  
  70. handleSelect(key, keyPath){
  71. switch(key){
  72. case '1':
  73. this.$router.push('/Page1');
  74. this.breadcrumbItems = ['导航一']
  75. break;
  76. case '2':
  77. this.$router.push('/Page2')
  78. this.breadcrumbItems = ['导航二']
  79. break;
  80. case '3':
  81. this.$router.push('/Page3')
  82. this.breadcrumbItems = ['导航三']
  83. break;
  84. }
  85. },
  86.  
  87. },
  88. }
  89. </script>

注意文件中多了一个

  1. <div style="margin-top:10px">
  2. <router-view></router-view>
  3. </div>

这个router-view就是用来显示跳转的页面,也就是page1,page2和page3。我们给左侧的菜单栏添加了一个响应,在响应函数中作出了路由跳转的处理。this.$router.push('/Page1');这句话的意思就是将当前要跳转的页面push到router的数组中。这里使用push而不是直接给数组赋值的原因是希望用户点击浏览器中的后退和前进按钮时可以回到之前操作的页面。修改完成后我们可以看一下效果,注意浏览器地址栏的变化:

可以看到我们在点击左侧导航栏里面不同的条目时,浏览器地址栏里显示的地址作出了改变,右侧显示的文字也分别对应三个page组件。至此,一个可以进行路由跳转的主页就完成了。

配置favicon图标

利用vue-cli脚手架搭建的项目,如果不手动配置,页面中是不会显示favicon图标。

avicon图标的配置也很简单,vue-cli默认帮我们安装了html-webpack-plugin(如果没有,可以自己npm安装),我们只需在html-webpack-plugin插件中添加favicon选项即可。html-webpack-plugin插件需要配置两处,一处是在开发环境下配置,另一处是在打包后的环境下配置,如果只配置开发环境下的,没有配置打包后环境的,造成的结果就是,项目本地运行时会有favicon图标,打包后放在服务器上时发现没有favicon图标;反之亦然。详细配置如下:

1、开发环境(开发调试时)配置:

favicon: 'src/assets/img/favicon.ico',

2、生产环境(打包后)配置:

favicon: 'src/assets/img/favicon.ico',

注意:配置favicon图标的路径是相对路径!!!

修改配置文件后需重启npm run dev

Vue+ElementUI 导航组件的更多相关文章

  1. Elementui 导航组件和Vuejs路由结合

    Elementui 导航组件和Vuejs路由结合, 达到点击导航切换路由,根据路由定位导航 一下是nav.vue代码,导航数据以json格式配置 <template> <el-men ...

  2. Vue+element-ui 重置组件样式的写法

    两种方式实现element-ui组件的样式 方案1:重置的公共组件样式的写法如下 然后在main.js中引入 import '@/assets/css/element.css'   方案2:每个.vu ...

  3. vue+element-ui, el-upload组件 文件上传之前return false,会自动调用文件移除回调问题

    日常搬砖的时候,项目中在使用element-ui的上传组件,但是当我在文件上传文件之前的回调里面做了些文件格式的二次校验和文件大小的校验的时 然后 return false 会发现调用 文件移除的回调 ...

  4. vue element-ui 分页组件封装

    <template> <el-pagination @size-change="handleSizeChange" @current-change="h ...

  5. vue + elementUi + upLoadIamge组件 上传文件到阿里云oss

    <template> <div class="upLoadIamge"> <el-upload action="https://jsonpl ...

  6. vue elementui table组件内容换行

    解决方案 tableData = [ { "name": "domain111", "metric": [ "平均耗时" ...

  7. Vue ElementUI Tree组件 回显问题(设置选择父级时会全选所有的子级,有此业务场景是不适合的)

    业务场景下有这样的问题 业务需求需要保存前端 半选节点 解决方案 let checked = this.$refs.menuTree.getCheckedKeys(); //此方法获取半选节点 let ...

  8. vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值。

    vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值. vue 父组件与子组件相互通信 一.父组件给子组件传值 props 实现父组件向子组件传值. 1父组件里: ...

  9. vue element-ui 日期选择器组件 日期时间格式化

    vue element-ui 组件开发大大提高了我们的效率,但有时候并不能满足我们的需求,例如时间,日期组件: element-ui 日期返回的格式是这样的,看下图: 但我们要的是另一个格式 , 如下 ...

随机推荐

  1. 封装查找元素以及集成日志输出,Base模块

    关于查找元素封装,Base模块 """ Selenium 封装基类 封装查找元素以及集成日志输出 """ from HTMLReport i ...

  2. else if 使用注意

    写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 例如:输入:ABCDE A 输出:1 错误代码如下: #include < ...

  3. 剑指Offer-16.合并两个排序的链表(C++/Java)

    题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 分析: 可以用一个新的节点,来去比较两个单调递增的链表当前节点的值,如果p1当前的值小于p2,则新 ...

  4. UOJ Easy Round #5

    Preface 本着刷遍(只刷一遍)各大OJ的原则我找到了一场UOJ的比赛 无奈UOJ一般的比赛难度太大,我就精选了UER中最简单的一场打了一下,就当是CSP前的练习吧 A. [UER #5]万圣节的 ...

  5. [探究] dsu on tree,一类树上离线问题的做法

    dsu on tree. \(\rm 0x01\) 前言\(\&\)技术分析 \(\bold{dsu~on~tree}\),中文别称"树上启发式合并"(虽然我并不承认这种称 ...

  6. 剑指offer:滑动窗口的最大值(栈和队列)

    1. 题目描述 /* 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值. 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别 ...

  7. 阿里云cdn缓存设置技巧,不同文件结尾用不同的缓存时间

    https://edu.aliyun.com/lesson_130_1505?spm=5176.10731542.0.0.2ed37dbf42YL6U#_1505

  8. JSP页面的注释细节

    业务场景:通过后台传参,jstl标签控制一个页签是否显示,不过现在要去掉判断,直接让页签显示 在sublime直接这样注释,然后刷新,一直找不到标签显示,其它的都是正常的 <!--<c:i ...

  9. 我是如何理解并使用maven的

    前言 一直想写一篇关于Maven的文章,但是不知如何下笔,如果说能使用,会使用Maven的话,一.两个小时足矣,不需要搞懂各种概念.那么给大家来分享下我是如何理解并使用maven的. 什么是Maven ...

  10. APP兼容性测试 (二) 最新 iPhone 机型分辨率总结

    iPhone手机发布时间及iOS发布 iPhone是美国苹果公司研发的智能手机系列,搭载苹果公司研发的iOS操作系统. 第一代iPhone于2007年1月9日由苹果公司前首席执行官史蒂夫·乔布斯发布, ...