项目场景:

知识产权模块标题和数量同时显示


问题描述

标题和对应数量接口样式显示稍有延迟,影响视觉效果


原因分析:

接口调用的先后造成轻微延迟


解决方案:

方案一:created()中先后顺序调换

  created() {
  	this.getNumber()
    this.getTitle()
  }
  methods: {
    // 获取导航列表
    getTitle() {
   	 	// 具体操作
    }, 
    // 导航数量
    getNumber() {
       // 具体操作
     },
  },

方案二:用axios.all搭配axios.spread同时请求两个异步请求

1.先看项目中有没有axios,若没有先下载

npm install axios --save

2.在mina.js中引入axios,因为其不属于vue全家桶,所以将其挂载在window原型上,实现全局使用

main.js

//引入axios模块
import axios from 'axios'
//将axios挂载在window原型链上
Window.prototype.axios = axios

3.在所需组件中使用axios配合axios.all()、axios.spread()同时发送多个请求

propertyRight.vue

created() {
    // 测试axios.all
    var me = this
    axios
      .all([me.getTitle(), me.getNumber()])
      .then(
        axios.spread(function (getTitle, getNumber) {
        // getTitle, getNumber相当于各自的res
          if (getTitle.status == 'SUCCESS' && getNumber.code == '200') {
          // 接口一成功后的具体操作
            me.typeList = ['学术论文', '学位论文', '专利']
            me.typeList2 = [
              'Article',
              'Paper',
              'Patent'
            ]
            // 接口二成功后的具体操作
            me.navbarList = getNumber.data
            me.typeNum = me.typeList2.map((item) => me.navbarList[item])
            console.log(me.typeNum)
          }
        })
      )
      .catch((e) => {
        this.$message.error('数据错误,请重新请求!')
      })
  },
//在methods中定义请求方法,并return出去,不要写请求回调then()
methods: {
// 测试axios.all
    getTitle() {
      console.log('调用第一个接口')
      return axiosRest({
        url: `/rest/v2/find/getTitle`,
        method: 'post',
      })
    },
    getNumber() {
      console.log('调用第二个接口')
      return axiosRest({
        url: `/rest/v2/find/getAllSummary`,
        method: 'post',
      })
    },
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐