Vue mockjs编写假数据并请求获取实现流程

Vue MockJS是一款用于前端mock数据的工具。其可以模拟请求API返回假数据,用于前端开发时进行数据调试、测试。本文将详细介绍Vue MockJS编写假数据并请求获取的实现流程。

1. 安装Vue MockJS

在使用Vue MockJS之前,需要确保在项目中已经安装了Vue,接着可以通过npm或yarn来安装Vue MockJS。

# 使用npm进行安装
npm install mockjs --save-dev

# 或者使用yarn进行安装
yarn add mockjs --dev

2. 编写假数据

在编写假数据之前,需要了解一些常用的MockJS语法,例如:

  • @string: 随机生成字符串
  • @number: 随机生成数字
  • @boolean: 随机生成布尔值
  • @date: 随机生成日期
  • @image: 随机生成图片
  • @paragraph: 随机生成文本
  • @cname: 随机生成中文名字
  • @url: 随机生成URL

在对假数据格式有了一定了解之后,可以开始编写假数据,例如:

// mockjs.js

import Mock from 'mockjs';

Mock.mock('/api/login', 'post', {
  'code': 200,
  'msg': '登录成功',
  'data': {
    'nickname': '@cname',
    'avatar': '@image("200x200")',
    'token': '@string(32)'
  }
});

上述代码定义了一个POST类型的API,当请求路径为/api/login时,返回如下JSON数据:

{
  "code": 200,
  "msg": "登录成功",
  "data": {
    "nickname": "张三",
    "avatar": "https://loremflickr.com/200/200",
    "token": "hHzHWMMYwwi56tmgWdeRQDGT04EZfT8o"
  }
}

在这个假数据中,@cname表示生成中文名字,@image("200x200")表示生成200x200大小的随机图片,@string(32)表示生成32位长度的随机字符串。

3. 发送AJAX请求获取假数据

使用Vue MockJS向后台请求数据的流程与正常请求数据的流程相同,只是前端需要手动拦截请求,然后使用MockJS返回预设数据。具体实现如下:

// main.js

import Vue from 'vue';
import axios from 'axios';
import Mock from 'mockjs';
import './mockjs.js';

Vue.prototype.$http = axios;

Mock.setup({
  timeout: 300
});

Vue.prototype.$mock = (url, data) => {
  return new Promise((resolve, reject) => {
    Mock.mock(url, data);
    axios.post(url, {}).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err);
    });
  });
};

在上述代码中,我们添加了一个$mock方法用于发起AJAX请求获取假数据。该方法的实现如下:

  1. 使用MockJS拦截请求,并返回预设数据。
  2. 发起一个POST类型的AJAX请求,调用后端API。
  3. 在请求结果返回时,使用Promise将数据返回给调用者。

使用方法如下:

// UserInfo.vue

export default {
  mounted() {
    this.$mock('/api/login', {}).then(res => {
      console.log(res);
    }).catch(err => {
      console.log(err);
    });
  }
};

在上述代码中,我们在UserInfo.vue组件mounted钩子函数中,模拟了一次登录请求,并将解析结果打印到控制台。

4. 示例应用

在这里,我们建立一个假的留言板应用。使用Vue MockJS实现向留言板提交留言、获取留言列表的假数据。

完整代码如下:

// main.js

import Vue from 'vue';
import axios from 'axios';
import Mock from 'mockjs';
import './mockjs.js';

Vue.prototype.$http = axios;

Mock.setup({
  timeout: 300
});

Vue.prototype.$mock = (url, data) => {
  return new Promise((resolve, reject) => {
    Mock.mock(url, data);
    axios.post(url, {}).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err);
    });
  });
};

//App.vue

<template>
  <div class="app">
    <h1>留言板</h1>

    <form @submit.prevent="handleSubmit">
      <div class="form-group">
        <label for="username">名字</label>
        <input id="username" type="text" class="form-control" v-model="username" required>
      </div>

      <div class="form-group">
        <label for="content">内容</label>
        <textarea id="content" class="form-control" v-model="content" required></textarea>
      </div>

      <button type="submit" class="btn btn-primary">提交留言</button>
    </form>

    <hr>

    <h2>留言列表</h2>

    <ul class="list-group">
      <li class="list-group-item" v-for="message in messages" :key="message.id">
        <h3>{{ message.username }}</h3>
        <p>{{ message.content }}</p>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      content: '',
      messages: [],
    };
  },

  mounted() {
    this.getMessages();
  },

  methods: {
    handleSubmit() {
      this.$mock('/api/messages', {
        'code': 200,
        'msg': '添加留言成功',
        'data': {
          'id': '@increment',
          'username': this.username,
          'content': this.content,
          'datetime': '@date'
        }
      }).then(() => {
        this.getMessages();
      }).catch((err) => {
        console.log(err);
      });
    },

    getMessages() {
      this.$mock('/api/messages', {
        'code': 200,
        'msg': '获取留言列表成功',
        'data|5-10': [{
          'id': '@increment',
          'username': '@cname',
          'content': '@paragraph(2)',
          'datetime': '@date'
        }]
      }).then((res) => {
        this.messages = res.data;
      }).catch((err) => {
        console.log(err);
      });
    },
  },
};
</script>

在上述代码中,我们使用$mock方法模拟了后端API,分别是提交留言和获取留言列表。同时,我们使用Vue的双向数据绑定机制实现向留言板提交留言,并在获取留言列表成功后展示留言信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue mockjs编写假数据并请求获取实现流程 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解VueJs中的V-bind指令

    下面是对“详解VueJs中的V-bind指令”的完整攻略: 什么是v-bind指令 v-bind指令是Vue.js中的一个指令,用于绑定元素属性和组件的属性。通过v-bind可以为HTML元素或Vue组件动态绑定属性或组件的属性。v-bind可以接受JavaScript表达式作为参数,这样就可以动态地给元素或组件设置属性值,或者是通过属性绑定来实现数据的双向…

    Vue 2023年5月27日
    00
  • vue项目实现文件下载进度条功能

    下面是“vue项目实现文件下载进度条功能”的完整攻略: 服务端实现文件下载接口 首先,在服务器端需要实现一个文件下载的接口,将需要下载的文件流返回给客户端。根据不同的后端语言和框架,具体实现会有所差异。这里以 Node.js 和 Express 框架为例,示例如下: // 下载文件接口 app.get(‘/download’, (req, res) =&gt…

    Vue 2023年5月28日
    00
  • 原生javascript实现类似vue的数据绑定功能示例【观察者模式】

    原生 Javascript 实现类似 Vue 的数据绑定功能可以使用观察者模式来实现。 观察者模式简介 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生改变时,它会通知所有的观察者对象,使它们能够自动更新自己。 在 JavaScript 中,我们可以使用事件…

    Vue 2023年5月28日
    00
  • vue微信分享 vue实现当前页面分享其他页面

    针对”vue微信分享 vue实现当前页面分享其他页面”这一话题,我提供以下的完整攻略: 1. 微信分享的原理 微信分享的原理是通过wx.config和wx.ready两个JS-SDK函数的设置,将需要分享的内容传递给微信服务器,生成分享链接。生成的分享链接是根据当前页面的URL生成的,因此我们需要在不同页面上对应不同的分享信息进行设置。 2. 配置微信 JS…

    Vue 2023年5月27日
    00
  • Vue组件的渲染流程详细讲解

    请先了解Vue组件渲染的基本流程: 解析模板:Vue会解析组件模板中的所有内容,包括HTML标记、CSS样式和JavaScript交互代码等。 创建VNode:解析完模板后,Vue会根据解析出来的数据创建一个虚拟节点(Virtual Node)。 创建组件实例:根据VNode创建组件实例,Vue会在实例化组件时对其进行一些具体的属性、数据等等进行初始化。 渲…

    Vue 2023年5月28日
    00
  • vue项目页面的打印和下载PDF加loading效果的实现(加水印)

    要实现Vue项目页面的打印和下载PDF加loading效果的实现(加水印),需要按照以下步骤进行: 1. 安装依赖 需要安装以下两个依赖: html2canvas:用于将页面截图并转换为canvas。 jspdf:用于将canvas转成PDF。 可以使用以下命令进行安装: npm install html2canvas jspdf –save 2. 实现打…

    Vue 2023年5月27日
    00
  • 一文详解Vue3响应式原理

    一文详解Vue3响应式原理 前言 Vue.js作为前端框架的代表之一,其响应式原理一直是其独特的魅力所在。Vue3中,响应式原理进行了一些重大调整和改进,本文将详细讲解Vue3响应式原理及其实现过程。 响应式原理 Vue的响应式原理是基于ES6中Object.defineProperty()的getter和setter方法实现的。Vue3在这个基础上,引入了…

    Vue 2023年5月28日
    00
  • Vue中Vue.extend()的使用及解析

    下面我将详细介绍Vue中Vue.extend()的使用及解析的完整攻略。 1. Vue.extend()的作用 在Vue中,我们经常需要生成一个组件,并将其作为另一个组件的子组件来使用。Vue.extend()方法就是为了方便我们定义和注册组件而存在的。 它的作用是基于Vue构造函数,创建一个“子类”,即一个可以被Vue组件系统识别的组件构造函数。通过ext…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部