Mock数据

Mock数据,第1张

使用步骤:

1.在项目当中src文件夹中创建mock文件夹

2.第二步准备JSON数据(mock文件夹中创建相应的JSON文件) -------格式化一下,别留有空格(跑不起来)

3.把mock数据需要的图片放置到public文件夹中【public文件夹在打包的时候,会把相应的资源原封不动打包到dist文件夹中】

4.创建mockServe.js通过mockjs插件实现模拟数据

5.mockServe.js文件在入口文件中引入(至少需要执行一次,才能模拟数据)

以轮播图为例:

banner.json

[
    {
        "id": "1",
        "imgUrl": "/images/banner1.jpg"
    },
    {
        "id": "2",
        "imgUrl": "/images/banner2.jpg"
    },
    {
        "id": "3",
        "imgUrl": "/images/banner3.jpg"
    },
    {
        "id": "4",
        "imgUrl": "/images/banner4.jpg"
    }
]

 mockServe.js

// 先引入mockjs模块
import Mock  from "mockjs";
// 把JSON数据格式引入进来【JSON数据格式根本没有对外暴露,但是可以引入】
// webpack默认对外暴露的:图片、JSON数据格式
import banner from './banner.json'

// mock数据:第一个参数请求地址,第二个参数:请求数据
 Mock.mock('./mock/banner',{code:200,data:banner}); //模拟首页的轮播图的数据 

在入口文件main.js中引入

// 引入MockServe.js-------mock数据
import '@/mock/mockServe'

接下来就需要向服务器发请求,获取到数据,存储于vuex中,展示数据,

mockAjax.js

//对于axios进行二次封装
import axios from 'axios'
// 引入进度条
import nprogress  from 'nprogress';
// 引入进度条样式
import "nprogress/nprogress.css"
// start:进度条开始  done:进度条结束

//   1.利用axios对象的方法create,去创建一个axios实例
// 2.request就是axios,只不过稍微配置了一下
const requests = axios.create({
    // 配置对象
    // 基础路径,发请求的时候,路径中会出现api
    baseURL: '/mock',
    // 代表请求超时的时间5s
    timeout: 5000,
});
// 请求拦截器:在发请求之前,请求拦截器可以检测到,可以在请求发出去之前做一些事情
requests.interceptors.request.use((config) => {
    // config :配置对象,对象里面有一个属性很重要,headers请求
    //  进度条开始
    nprogress.start();
    return config;
});
// 响应拦截器
requests.interceptors.response.use((res) => {
    // 成功的回调函数:服务器响应数据回来以后,响应拦截器可以检测到,可以做一些事情
    //  进度条结束
    nprogress.done();
    return res.data;
}, (error) => {
    // 响应失败的回调函数
    return Promise.reject(new Error('faile'))
});
// 对外暴露
export default requests;

 index.js     

 import mockRequests from './mockAjax'
// 获取banner   mock数据  get请求   没有/mock  因为前边已经写过了 直接写banner
//  对象的写法
export const reqGetBannerList=()=>mockRequests.get('./banner');

在组件中挂载完毕之后发请求:

  mounted() {
    //   派发action,通过Vuex发起ajax请求,将数据存储在仓库中
    // mounted:组件挂载完毕,正常说组件结构(DOM)已经全有了
    this.$store.dispatch("getBannerList");   
  },

vuex三连环,获取轮播图数据,

import {  reqGetBannerList  } from '@/api'
// home模块的小仓库
const state = { 
    // 轮播图的数据
    bannerList: []
};
// mutations是唯一修改state的地方 ,在action中是不允许修改的  
const mutations = {
    GETBANNERLIST(state, bannerList) {
        state.bannerList = bannerList;
    },
};
const actions = {
    // 获取首页轮播图的数据   返回的是promise 等待响应的结果 因此写入async  await
    async getBannerList({ commit }) {
        let result = await reqGetBannerList();
        if (result.code == 200) {
            commit('GETBANNERLIST', result.data)
        }
    },
};
// 计算属性
const getters = {};
export default {
    state,
    mutations,
    actions,
    getters
}

在组件中,向vuex仓库要数据,

import { mapState } from "vuex";
computed: {
    ...mapState({
      bannerList: (state) => state.home.bannerList,
    }),
  },

现在组件中数据已经拿到了,剩下的活就是替换图片就完事了。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/945103.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-18
下一篇2022-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存