一:mock.js模拟响应ajax请求

   1、安装mockjs依赖

  npm install mockjs -D              #只在开发环境使用

2.配置开发环境及生产环境

为了只在开发环境使用mock,而打包到生产环境时自动不使用mock,我们可以在env中做一个配置

1.spa->config->dev.env.js(开发环境)

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')module.exports = merge(prodEnv, {NODE_ENV: '"development"',MOCK: 'true'
})

 2.spa->config->prod.env.js(生产环境)

'use strict'
module.exports = {NODE_ENV: '"production"',MOCK: 'false'
}

3.main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
//开发环境下才会引入mockjs
//开发环境:true && require('@/mock')会执行后面代码,也就是说mock.js会被导入到当前环境中
//开发环境:false&& require('@/mock')不会执行后面代码,也就是说mock.js不会被导入到当前环境中
process.env.MOCK && require('@/mock')
import 'element-ui/lib/theme-chalk/index.css' // 新添加 2 ,避免后期打包样式
import App from './App'
import router from './router'
import ElementUI from 'element-ui' // 新添加 1
import axios from '@/api/http' // #vue项目对axios的全局配置
//import axios from 'axios'
import VueAxios from 'vue-axios'Vue.use(ElementUI)   // 新添加 3
Vue.use(VueAxios,axios)
Vue.config.productionTip = false/* eslint-disable no-new */
new Vue({undefinedel: '#app',router,components: { App },template: '<App/>'
}

2.mock的使用

      在src目录下创建mock目录,定义mock主文件index.js,并在该文件中定义拦截路由配置

1./src/mock/json/login-mock.js(用来造json数据的)

// const loginInfo = {
//  code: -1,
//  message: '密码错误'
// }//使用mockjs的模板生成随机数据
const loginInfo = {'code|0-1': 0,'msg|3-10': 'msg'
}
export default loginInfo;

定义接口调用返回的json格式 

2.  /src/mock/index.js(用来引用数据的)

返回的json格式与对应的接口请求地址进行绑定

import Mock from 'mockjs' //引入mockjs,npm已安装
import action from '@/api/action' //引入请求地址//全局设置:设置所有ajax请求的超时时间,模拟网络传输耗时
Mock.setup({// timeout: 400  //延时400s请求到数据timeout: 200 - 400 //延时200-400s请求到数据
})//引登陆的测试数据,并添加至mockjs
import loginInfo from '@/mock/json/login-mock.js'
let s1 = action.getFullPath('SYSTEM_USER_DOLOGIN')
Mock.mock(s1, "post", loginInfo)
// Mock.mock(s1, /post|get/i, loginInfo)
运行结果:(其运行结果是随机进行的)

二:前台页面的搭建

1、将全局组件导入(首页导航,左侧菜单,顶部)

1.AppMain.vue

<template><el-container class="main-container"><el-aside v-bind:class="asideClass"><LeftNav></LeftNav></el-aside><el-container><el-header class="main-header"><TopNav></TopNav></el-header><el-main class="main-center">Main</el-main></el-container></el-container>
</template><script>// 导入组件import TopNav from '@/components/TopNav.vue'import LeftNav from '@/components/LeftNav.vue'// 导出模块export default {data(){return{asideClass:'main-aside'}},//注册其它主键components:{TopNav,LeftNav},created(){//v是传过来的参数this.$root.Bus.$on("collapsed-aside",(v)=>{this.asideClass=v ?'main-aside-collapsed':'main-aside ';})}};
</script>
<style scoped>.main-container {undefinedheight: 100%;width: 100%;box-sizing: border-box;}.main-aside-collapsed {undefined/* 在CSS中,通过对某一样式声明! important ,可以更改默认的CSS样式优先级规则,使该条样式属性声明具有最高优先级 */width: 64px !important;height: 100%;background-color: #334157;margin: 0px;}.main-aside {undefinedwidth: 240px !important;height: 100%;background-color: #334157;margin: 0px;}.main-header,.main-center {undefinedpadding: 0px;border-left: 2px solid #333;}
</style>

2.LeftNav.vue

<template><el-menu default-active="2" class="el-menu-vertical-demo" background-color="#334157"text-color="#fff" active-text-color="#ffd04b" :collapse="collapsed" ><!-- <el-menu default-active="2" :collapse="collapsed" collapse-transition router :default-active="$route.path" unique-opened class="el-menu-vertical-demo" background-color="#334157" text-color="#fff" active-text-color="#ffd04b"> --><div class="logobox"><img class="logoimg" src="../assets/img/logo.png" alt=""></div><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>导航一</span></template><el-menu-item-group><template slot="title">分组一</template><el-menu-item index="1-1">选项1</el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group><el-menu-item-group title="分组2"><el-menu-item index="1-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="1-4"><template slot="title">选项4</template><el-menu-item index="1-4-1">选项1</el-menu-item></el-submenu></el-submenu><el-menu-item index="2"><i class="el-icon-menu"></i><span slot="title">导航二</span></el-menu-item><el-menu-item index="3" disabled><i class="el-icon-document"></i><span slot="title">导航三</span></el-menu-item><el-menu-item index="4"><i class="el-icon-setting"></i><span slot="title">导航四</span></el-menu-item></el-menu>
</template>
<script>export default {data(){return{collapsed:false}},//钩子函数created(){//v是传过来的参数this.$root.Bus.$on("collapsed-aside",(v)=>{this.collapsed=v;})}}
</script>
<style>.el-menu-vertical-demo:not(.el-menu--collapse) {undefinedwidth: 240px;min-height: 400px;}.el-menu-vertical-demo:not(.el-menu--collapse) {undefinedborder: none;text-align: left;}.el-menu-item-group__title {undefinedpadding: 0px;}.el-menu-bg {undefinedbackground-color: #1f2d3d !important;}.el-menu {undefinedborder: none;}.logobox {undefinedheight: 40px;line-height: 40px;color: #9d9d9d;font-size: 20px;text-align: center;padding: 20px 0px;}.logoimg {undefinedheight: 40px;}
</style>

3.TopNav.vue

<template><!-- <el-menu :default-active="activeIndex2" class="el-menu-demo" mode="horizontal" @select="handleSelect" background-color="#545c64"text-color="#fff" active-text-color="#ffd04b"><el-menu-item index="1">处理中心</el-menu-item><el-submenu index="2"><template slot="title">我的工作台</template><el-menu-item index="2-1">选项1</el-menu-item><el-menu-item index="2-2">选项2</el-menu-item><el-menu-item index="2-3">选项3</el-menu-item><el-submenu index="2-4"><template slot="title">选项4</template><el-menu-item index="2-4-1">选项1</el-menu-item><el-menu-item index="2-4-2">选项2</el-menu-item><el-menu-item index="2-4-3">选项3</el-menu-item></el-submenu></el-submenu><el-menu-item index="3" disabled>消息中心</el-menu-item><el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item></el-menu> --><el-menu class="el-menu-demo" mode="horizontal" background-color="#334157" text-color="#fff" active-text-color="#fff"><el-button class="buttonimg"><img class="showimg" :src="collapsed?imgshow:imgsq" @click="doToggle()"></el-button><el-submenu index="2" class="submenu"><template slot="title">超级管理员</template><el-menu-item index="2-1">设置</el-menu-item><el-menu-item index="2-2">个人中心</el-menu-item><el-menu-item @click="exit()" index="2-3">退出</el-menu-item></el-submenu></el-menu>
</template><script>export default {data(){return{collapsed:false,imgshow:require('@/assets/img/show.png'),imgsq:require('@/assets/img/sq.png')}},methods:{doToggle(){this.collapsed=!this.collapsed;//触发事件this.$root.Bus.$emit("collapsed-aside",this.collapsed)},//退出功能exit(){this.$router.push({path:'/Login'})}}}
</script><style scoped>.el-menu-vertical-demo:not(.el-menu--collapse) {undefinedborder: none;}.submenu {undefinedfloat: right;}.buttonimg {undefinedheight: 60px;background-color: transparent;border: none;}.showimg {undefinedwidth: 26px;height: 26px;position: absolute;top: 17px;left: 17px;}.showimg:active {undefinedborder: none;}
</style>

2、在路由中进行配置

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Login from '@/views/Login'
import Reg from '@/views/Reg'
import AppMain from '@/components/AppMain'
import LeftNav from '@/components/LeftNav'
import TopNav from '@/components/TopNav'
Vue.use(Router)export default new Router({undefinedroutes: [{undefinedpath: '/',name: 'Login',component: Login},{undefinedpath: '/Login',name: 'Login',component: Login},{path: '/Reg',name: 'Reg',component: Reg},{path: '/AppMain',name: 'AppMain',component:AppMain,children:[{path: '/LeftNav',name: 'LeftNav',component: LeftNav},{path: '/TopNav',name: 'TopNav',component: TopNav}]}]
})

3、导入图片

4、总线的概念:将一个空的Vue实例放到根组件下,所有的子组件都能调用

定义总线:vue Bus总线

1.main.js

//The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
//开发环境下才会引入mockjs
//开发环境:true && require('@/mock')会执行后面代码,也就是说mock.js会被导入到当前环境中
//开发环境:false&& require('@/mock')不会执行后面代码,也就是说mock.js不会被导入到当前环境中
process.env.MOCK && require('@/mock')
import 'element-ui/lib/theme-chalk/index.css' // 新添加 2 ,避免后期打包样式
import App from './App'
import router from './router'
import ElementUI from 'element-ui' // 新添加 1
import axios from '@/api/http' // #vue项目对axios的全局配置
//import axios from 'axios'
import VueAxios from 'vue-axios'Vue.use(ElementUI)   // 新添加 3
Vue.use(VueAxios,axios)
Vue.config.productionTip = false/* eslint-disable no-new */
new Vue({undefinedel: '#app',//自定义的事件总线对象,用于父子组件的通信data(){return{Bus:new Vue({})}},router,components: { App },template: '<App/>'
})

2. 结果展示:

SPA项目开发之首页导航+左侧菜单相关推荐

  1. SPA项目开发(首页导航左侧菜单)

    目录 一,mock.js模拟响应ajax请求 1.安装mock.js依赖 2.配置开发环境以及生产环境 3.添加默认接口数据 4.绑数据 二,树形菜单收缩运用&前台主界面搭建 三,退出功能 一 ...

  2. spa项目开发首页导航左侧菜单

    前言:今天要分享的知识是spa项目完成首页导航以及左侧菜单 码字不易,转载请说明!!! 目录 目标 效果图 一.mock.js ①什么是Mock.js ②安装mockjs依赖 ③配置开发环境及生产环境 ...

  3. vue首页导航+左侧菜单

    目录 1. Mock.js:是什么? 2. Mock.js使用步骤 3.  后台首页AppMain.vue的创建 1. Mock.js:是什么? 1,前后端分离之后,前端迫切需要一种机制,不再需要依赖 ...

  4. SPA项目开发 之 登录注册

    SPA项目开发 登录注册 数据库 后台代码 prox.xml 配置 web.xml 配置 CorsFilter HBuilder X api 目录 action.js http.js router 目 ...

  5. Vue.js 实战系列之实现视频类WebApp的项目开发——6. 首页视频详情实现

    如果想看该实战系列的其他内容,请移步至 Vue.js 实战系列之实现视频类WebApp的项目开发. 项目仓库地址,欢迎 Star 实现效果 功能实现 视频详情页基本实现 创建 InfoBar.vue ...

  6. vue商城项目开发:底部导航菜单(路由)

    组件中引入css样式文件 路由:底部导航

  7. SPA项目开发之登录

    1. vue 的引入和配置使用 element-ui 框架 使用vue-cli脚手架工具创建一个vue项目 vue init webpack tang_spa npm安装elementUI cd ta ...

  8. SPA项目开发之登录注册

    目录 一.前置工作 1.将项目导入文件夹中 2.运行项目 3.修改db.properties 4.接着在前端导入api文件夹 5.运行其中的树形菜单 6.安装开发模块 二.用户登录界面排版 1.引入m ...

  9. spa项目开发(登录注册)

    目录 一.spa项目完成登录注册布局 1.安装开发模块 2.引入main.js配置 3.登录注册页跳转 二.vue数据交互实现登录功能 引入main.js配置 三.ajax 跨域问题 1.引入main ...

最新文章

  1. python入门教程共四本书籍-关于 Python 的经典入门书籍有哪些?
  2. Hibernate的dynamic-insert和dynamic-update的使用
  3. MFC中快速应用OpenCV教程
  4. 大数据上的“大产品”
  5. mac azure git_将Azure Data Studio与Git和GitHub集成
  6. 引入神经网络 API 1.1、支持全面屏,Android 9.0 来了!
  7. MySQL【第三篇】数据类型
  8. 使用Oracle 10g的Logminer挖掘日志
  9. 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
  10. datagrid--新增
  11. 隐马尔可夫模型HMM(一)
  12. LimeSDR官方系列教程(三):一个实际测试例子
  13. 怎么看mmdetection版本_mmdetection使用指南
  14. n3k配置vpc是否还需要配置hsrp_连结7000系列交换机使用HSRP配置示例
  15. 王烁老师 - 问得太少你吃亏
  16. 微信小程序二维码如何生成?
  17. Unity SKFramework框架(二十一)、Texture Filter 贴图资源筛选工具
  18. Maven——maven工程找不到maven库
  19. 计算机辅助绘制地图是数字图像,基于遥感数字图像的电子教学地图的制作.pdf...
  20. 有了art-template,如有神助

热门文章

  1. 自定义Switch(秒懂)
  2. 能骗173万的诈骗电话可以做到多逼真?
  3. python安装gensim_安装gensim
  4. 做一个登陆效果,输入用户名和密码,如果用户名是:张三,密码是:123就提示登陆成功,否则提示登录失败。
  5. 华为云文件服务器配置,华为云 文件服务器配置
  6. 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别
  7. 怎么改锁定计算机的背景,电脑修改登录界面背景壁纸的操作方法
  8. win7 装显卡驱动后只显示桌面背景 - 解法办法一例
  9. Flex在线文档阅读器::pdf、doc、docx、xls、xlsx、ppt、pptx、htm、txt、rtf、epub、csv、xdoc等
  10. 买个云服务器搭建自己的ngrok做微信公众号开发