Vue实现首页导航和左侧菜单,介绍mock.js并实现登录注册间的跳转,实现左侧栏折叠效果,优化Main.vue组件,使用mock.js生成随机响应数据

news/2024/7/10 0:50:12 标签: vue.js, 前端, vue, vue组件, mockjs, main, vscode

main-toc">目录

mockjs-toc" style="margin-left:0px;">1. mockjs

mockjs%E4%BB%8B%E7%BB%8D-toc" style="margin-left:40px;">1.1 mockjs介绍

mockjs%E4%BD%BF%E7%94%A8%E6%AD%A5%E9%AA%A4-toc" style="margin-left:40px;">1.2 mockjs使用步骤

mockjs%E4%BE%9D%E8%B5%96-toc" style="margin-left:80px;">1.2.1 安装mockjs依赖

mockjs-toc" style="margin-left:80px;">1.2.2 在项目中引入mockjs

1.2.3 创建目录和文件

1.2.4 为每个组件准备模拟数据

1.2.5 测试

1.2.6 前端调试

mockjs%E7%94%9F%E6%88%90%E9%9A%8F%E6%9C%BA%E5%93%8D%E5%BA%94%E6%95%B0%E6%8D%AE-toc" style="margin-left:80px;">1.2.7 mockjs生成随机响应数据

1.2.8 根据不同响应,给出不同提示

2. 登录注册间的跳转

2.1 加入登录及注册按钮

2.2 增加注册组件

2.3 配置路由

3. 系统首页

3.1 准备

vue-toc" style="margin-left:40px;">3.2 Main.vue

3.3 配置路由

3.4 编辑登录组件

3.5 顶部组件显示折叠或展示图标

3.6 实现左侧栏折叠效果


1. mockjs

mockjs%E4%BB%8B%E7%BB%8D">1.1 mockjs介绍

Mock.js是一个模拟数据的生成器,用来帮助前端调试开发、进行前后端的原型分离以及用来提高自动化测试效率。众所周知Mock.js因为两个重要的特性风靡前端:

  • 数据类型丰富
    支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • 拦截Ajax请求
    不需要修改既有代码,就可以拦截Ajax请求,返回模拟的响应数据。

官网

注:easy-mock,一个在线模拟后台的数据平台

mockjs%E4%BD%BF%E7%94%A8%E6%AD%A5%E9%AA%A4">1.2 mockjs使用步骤

mockjs%E4%BE%9D%E8%B5%96">1.2.1 安装mockjs依赖

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

mockjs">1.2.2 在项目中引入mockjs

为了只在开发环境使用mock,而打包到生产环境时自动不使用mock,我们可以在env中做一个配置。
在config目录里面有两个配置文件,分别是dev.env.js(开发环境),prod.env.js(生产环境)。
开发环境配置如下

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  //增加配置
  MOCK:'true'
})

生产环境配置如下

module.exports = {
  NODE_ENV: '"production"',
  //新增mockjs配置
  MOCK:'false'
}

修改main.js:

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

//开发环境下才会引入mockjs,新增
//import是ES6标准中的模块化解决方案,require是node中遵循CommonJS规范的模块化解决方案
//后者支持动态引入,也就是require(${path}/xx.js)
//process对象是Node的一个全局对象,提供当前Node进程的信息
//process.env返回环境变量
process.env.MOCK && require('@/mock')
......

注意:import是ES6标准中的模块化解决方案,require是node中遵循CommonJS规范的模块化解决方案,后者支持动态引入,也就是require(${path}/xx.js)

1.2.3 创建目录和文件

1) 在src目录下创建mock目录,定义mock主文件index.js,并在该文件中定义拦截路由配置,/src/mock/index.js。
index.js内容如下:

//引入mockjs,npm已安装
import Mock from 'mockjs'

//引入封装的请求地址
import action from '@/api/action'

//全局设置:设置所有ajax请求的超时时间,模拟网络传输耗时
Mock.setup({
  //延时400s请求到数据
  // timeout: 400
  //延时200-400s请求到数据
  timeout: 200 - 400
})

1.2.4 为每个组件准备模拟数据

为每个组件(*.vue)准备模拟数据。然后导入到mock/index.js中

在mock/index.js中导入,设置请求url,模拟发送数据

。。。。。。
//将模拟数据导入到这里。
import loginData from '@/mock/json/login-mock.js'

//获取请求的url
let url = action.getFullPath("SYSTEM_USER_DOLOGIN");

//通过mockjs模拟发送请求
//url  请求url
//post 请求方式
//loginData  模拟数据
//mockjs会拦截发送的请求,并使用模拟数据充当真实返回的响应数据
//Mock.mock(url, "post", loginData);

//如果请求既可以是get又可以是post的请求方式可以使用如下方式:
Mock.mock(url, /post|get/i, loginData);

设置模拟数据,编辑login-mock.js

//为增加可读性loginData与mack/index.js中导入的名称对应
const loginData = {
  "success": true,
  "msg": "密码正确"
}

//将当前模块导出,导出后index.js才可以导入
export default loginData

1.2.5 测试

启动nodejs服务,关闭后台服务,测试登录。现在已经可以通过mockjs进行模拟数据测试了。

在mock/index.js中设置的mock请求,既可以是post可以是get方式的,如果要测试get请求方式,可以将Login.vue中的发送请求部分修改为get方式。

//修改url的获取方式,url已经配置在了action.js中
//post请求方式
/* let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, params).then(resp => {
  console.log(resp);
}).catch(resp => {}); */

//get请求方式,注意:与post请求不同的是参数的设置方式
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, {params: params}).then(resp => {
  console.log(resp);
}).catch(resp => {});

注意:使用mockjs进行前端测试时,前提示要和后台开发人员定义好接口,否则测试没有意义。

1.2.6 前端调试

修改mock/index.js文件中的配置:

//如果请求既可以是get又可以是post的请求方式可以使用如下方式:
//Mock.mock(url, /post|get/i, loginData);

//前端调试模式
Mock.mock(url, /post|get/i, (options) => {
  // 最佳实践,
  debugger;
  return Mock.mock(loginData);
});

修改后点击提交,在打开开发者工具的前提下,会进入调试模式。

mockjs%E7%94%9F%E6%88%90%E9%9A%8F%E6%9C%BA%E5%93%8D%E5%BA%94%E6%95%B0%E6%8D%AE">1.2.7 mockjs生成随机响应数据

编辑login-mock.js文件:

//静态响应
/* const loginData = {
  "success": true,
  "msg": "密码正确"
} */

//随机响应
const loginData = {
  //1表示50%概率
  "success|1": true,
  //2-3指重复2到3次
  "msg|2-3": "msg"
}

1.2.8 根据不同响应,给出不同提示

编辑Login.vue文件

//get请求方式
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, {
  params: params
}).then(resp => {

  //提示成功和失败,主要演示获取响应数据的方法
  if (resp.data.success) {
    //可以到element-ui官网查看用法
    this.$message({
      message: '登录成功',
      type: 'success'
    });
  }else{
    this.$message({
      message: '登录失败',
      type: 'error'
    });
    
  }

  console.log(resp);
}).catch(resp => {});

2. 登录注册间的跳转

2.1 加入登录及注册按钮

编辑Login.vue,加入忘记密码,注册按钮

<!-- 加入忘记密码和注册链接 -->
<el-row style="text-align:center;margin-top: -5px;">
    <el-link type="primary" style="margin-right: 40px;">忘记密码</el-link>
    <el-link type="primary">用户注册</el-link>
</el-row>

2.2 增加注册组件

Register.vue

<template>
<div class="login-wrap">
<el-form class="login-container">
  <h1 class="title">用户登录</h1>
  <el-form-item label="账户">
    <el-input type="text" v-model="userNo" placeholder="账户" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="密码">
    <el-input type="password" v-model="userPwd" placeholder="密码" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="确认密码">
    <el-input type="password" v-model="userPwd2" placeholder="确认密码" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="register()" style="width:48%">注册</el-button>
    <el-button type="primary" @click="cancel()" style="width:48%">返回</el-button>
  </el-form-item>
</el-form>
</div>
</template>
export default {
    name: 'Register',
    data: function() {
          return {
            userNo: '',
            userPwd: '',
            userPwd2: ''
          }
    },
    methods: {
          register: function() {

          },
          gotoLogin: function() {
            //获取路由,转换到根路径,及登录组件
            this.$router.push('/');
          }
    }
}

通过路由跳转,常用方式

  • 字符串: this.$router.push('/home/first')
  • 对象: this.$router.push({ path: '/home/first' })
  • 命名的路由:
    this.$router.push({ name: 'home', params: { userId: wise }})
    params为传递的参数

this.$router.push、replace、go的区别

this.router.push(): 跳转到不同的url,这个方法会向history栈添加一个记录,点击后退会返回到上一个页面 this.router.replace() : 同样是跳转到指定的url,但是这个方法不会向history里面添加新的记录,点击返回,会跳转到上上一个页面。上一个记录是不存在的。
this.$router.go(n):相对于当前页面向前或向后跳转多少个页面,类似 window.history.go(n)。n可为正数可为负数。负数返回上一个页面

2.3 配置路由

router/index.js

//首先导入组件
import Login from '@/views/Login'
import Register from '@/views/Register'

Vue.use(Router)

export default new Router({
  routes: [
    {
      //配置路由,根路径访问Login组件
      path: '/',
      name: 'Login',
      component: Login
    },
    {
      //增加注册组件路由
      path: '/Register',
      name: 'Register',
      component: Register
    }
  ]
})

3. 系统首页

3.1 准备

  1. 在随课件提供的目录中有图片(assets目录),拷入项目的assets目录
  2. 将Main.vue拷贝放入项目的views目录 (首页)
  3. LeftAside.vue(左侧栏组件),TopNav.vue(顶部组件)拷贝放入components目录

vue">3.2 Main.vue

<template>
	<el-container class="main-container">
      <!-- 侧边栏有折叠效果,通过class控制折叠还是显示的效果 -->
		<el-aside v-bind:class="asideClass">
			<LeftAside></LeftAside>
		</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>
   // 导出模块
   export default {

   //组件名称
   name: 'Main',

   data: function() {
     return {
       asideClass: 'main-aside',
     }
   },

   //将import的组件定义的Main中以便于使用
   components:{
     TopNav, LeftAside
   }

   };

3.3 配置路由

router/index.js, 配置路由前先导入Main组件

....
{
  //增加Main组件路由
  path: '/Main',
  name: 'Main',
  component: Main
}

3.4 编辑登录组件

当登录成功后,显示系统首页:

系统运行后的界面:

 

3.5 顶部组件显示折叠或展示图标

TopNav.vue

 

export default {
    //定义组件名称
    name:'TopNav',

    data: function() {
      return {
        //默认展示侧边栏
        opened:true,

        //require是node中遵循CommonJS规范的模块化解决方案,支持动态引入
        imgshow: require('../assets/img/show.png'),
        imgsq: require('../assets/img/sq.png')
      }
    }
}

3.6 实现左侧栏折叠效果

步骤:

  1. TopNav.vue定义监听函数,监听折叠按键的click事件,并将折叠或打开的状态值通过自定义事件传递给Main.vue组件。

 

2.Main.vue组件接收到TopNav.vue组件传递的状态值,根据状态值设置打开或折叠的样式,并将状态值通过props传递给LeftAside.vue组件

 

script部分:

 

3.LeftAside.vue组件通过接收到的状态值设置自身的打开或折叠效果。

 

 


http://www.niftyadmin.cn/n/5133064.html

相关文章

复习Animate和木疙瘩学习笔记-动画制作的回家之路

这个融媒体H5制作平台功能比较完善&#xff1a;包含了Flash(现在叫Animate)传统H5网页制作 720全景视频制作发布网页&#xff01; 主要功能&#xff1a;素材导入、2D动画制作、常见交互添加、发布生成链接二维码 基本就是一个制作H5为主&#xff0c;但是里面的动画可以依赖4种…

【MATLAB源码-第62期】基于蜣螂优化算法(DBO)的无人机三维地图路径规划,输出最短路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蜣螂优化算法&#xff08;Dung Beetle Optimization, DBO&#xff09;是一种模拟蜣螂在寻找食物和进行导航的过程的优化算法。蜣螂是一种能够将粪球滚到合适地点的昆虫&#xff0c;它们利用天空中的光线和自身的感知能力来确…

英语兔语法笔记(1)动词分类+动词时态

B站英语兔的语法课&#xff0c;强推&#xff01;和学校里面的不同&#xff0c;通俗易懂&#xff0c;看过之后真的醍醐灌顶~ 英语兔语法网课https://www.bilibili.com/video/BV1XY411J7aG?p1&vd_source1d1be06bfa4daa398bc518a66de92cf8 一.动词分类 大致看一下就好&…

十八、模型构建器(ModelBuilder)快速提取城市建成区——批量掩膜提取夜光数据、夜光数据转面、面数据融合、要素转Excel(基于参考比较法)

一、前言 前文实现批量投影栅格、转为整型,接下来重点实现批量提取夜光数据,夜光数据转面、夜光数据面数据融合、要素转Excel。将相关结果转为Excel,接下来就是在Excel中进行阈值的确定,阈值确定无法通过批量操作,除非采用其他方式,但是那样的学习成本较高,对于参考比较…

C++报时软件

第一步&#xff1a; 打好以下代码 #define _CRT_SECURE_NO_WARNINGS #include<ctime> #include<stdio.h> #include<Windows.h> int main(){}ctime为报时软件主体 第二步&#xff1a; 打好以下代码 #define _CRT_SECURE_NO_WARNINGS #include<ctime&g…

预制菜配送小程序商城的效果如何

预制菜是近些年热度较高的新赛道&#xff0c;很多商家品牌入局&#xff0c;而投入到市场中也受到不少商家的喜欢&#xff0c;各种品牌和经销商层出不穷&#xff0c;目前各品牌主要以拓展市场和研究菜品为主&#xff0c;而线上无疑是很好的宣传销售渠道。 接下来让我们看看通过…

代码随想录算法训练营第23期day36|738.单调递增的数字、968.监控二叉树

目录 一、&#xff08;leetcode 738&#xff09;单调递增的数字 二、&#xff08;leetcode 968&#xff09;监控二叉树 一、&#xff08;leetcode 738&#xff09;单调递增的数字 力扣题目链接 状态&#xff1a;查看思路Debug后AC。 暴力方法肯定是超时&#xff0c;因此需要…

【C++】缺省参数及函数重载

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 缺省参数1.1 缺省…