SPA项目开发之首页导航+左侧菜单
一: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项目开发之首页导航+左侧菜单相关推荐
- SPA项目开发(首页导航左侧菜单)
目录 一,mock.js模拟响应ajax请求 1.安装mock.js依赖 2.配置开发环境以及生产环境 3.添加默认接口数据 4.绑数据 二,树形菜单收缩运用&前台主界面搭建 三,退出功能 一 ...
- spa项目开发首页导航左侧菜单
前言:今天要分享的知识是spa项目完成首页导航以及左侧菜单 码字不易,转载请说明!!! 目录 目标 效果图 一.mock.js ①什么是Mock.js ②安装mockjs依赖 ③配置开发环境及生产环境 ...
- vue首页导航+左侧菜单
目录 1. Mock.js:是什么? 2. Mock.js使用步骤 3. 后台首页AppMain.vue的创建 1. Mock.js:是什么? 1,前后端分离之后,前端迫切需要一种机制,不再需要依赖 ...
- SPA项目开发 之 登录注册
SPA项目开发 登录注册 数据库 后台代码 prox.xml 配置 web.xml 配置 CorsFilter HBuilder X api 目录 action.js http.js router 目 ...
- Vue.js 实战系列之实现视频类WebApp的项目开发——6. 首页视频详情实现
如果想看该实战系列的其他内容,请移步至 Vue.js 实战系列之实现视频类WebApp的项目开发. 项目仓库地址,欢迎 Star 实现效果 功能实现 视频详情页基本实现 创建 InfoBar.vue ...
- vue商城项目开发:底部导航菜单(路由)
组件中引入css样式文件 路由:底部导航
- SPA项目开发之登录
1. vue 的引入和配置使用 element-ui 框架 使用vue-cli脚手架工具创建一个vue项目 vue init webpack tang_spa npm安装elementUI cd ta ...
- SPA项目开发之登录注册
目录 一.前置工作 1.将项目导入文件夹中 2.运行项目 3.修改db.properties 4.接着在前端导入api文件夹 5.运行其中的树形菜单 6.安装开发模块 二.用户登录界面排版 1.引入m ...
- spa项目开发(登录注册)
目录 一.spa项目完成登录注册布局 1.安装开发模块 2.引入main.js配置 3.登录注册页跳转 二.vue数据交互实现登录功能 引入main.js配置 三.ajax 跨域问题 1.引入main ...
最新文章
- python入门教程共四本书籍-关于 Python 的经典入门书籍有哪些?
- Hibernate的dynamic-insert和dynamic-update的使用
- MFC中快速应用OpenCV教程
- 大数据上的“大产品”
- mac azure git_将Azure Data Studio与Git和GitHub集成
- 引入神经网络 API 1.1、支持全面屏,Android 9.0 来了!
- MySQL【第三篇】数据类型
- 使用Oracle 10g的Logminer挖掘日志
- 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
- datagrid--新增
- 隐马尔可夫模型HMM(一)
- LimeSDR官方系列教程(三):一个实际测试例子
- 怎么看mmdetection版本_mmdetection使用指南
- n3k配置vpc是否还需要配置hsrp_连结7000系列交换机使用HSRP配置示例
- 王烁老师 - 问得太少你吃亏
- 微信小程序二维码如何生成?
- Unity SKFramework框架(二十一)、Texture Filter 贴图资源筛选工具
- Maven——maven工程找不到maven库
- 计算机辅助绘制地图是数字图像,基于遥感数字图像的电子教学地图的制作.pdf...
- 有了art-template,如有神助
热门文章
- 自定义Switch(秒懂)
- 能骗173万的诈骗电话可以做到多逼真?
- python安装gensim_安装gensim
- 做一个登陆效果,输入用户名和密码,如果用户名是:张三,密码是:123就提示登陆成功,否则提示登录失败。
- 华为云文件服务器配置,华为云 文件服务器配置
- 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别
- 怎么改锁定计算机的背景,电脑修改登录界面背景壁纸的操作方法
- win7 装显卡驱动后只显示桌面背景 - 解法办法一例
- Flex在线文档阅读器::pdf、doc、docx、xls、xlsx、ppt、pptx、htm、txt、rtf、epub、csv、xdoc等
- 买个云服务器搭建自己的ngrok做微信公众号开发