为了账号安全,请及时绑定邮箱和手机立即绑定

在ajax完成之前如何显示加载指示器?

在ajax完成之前如何显示加载指示器?

POPMUISE 2022-12-09 19:04:41
我想显示一个加载微调器,直到我的消息加载完成。我在我的中实现了我的微调器Message.vue:import backend from '...'export default {  mounted: function() {    this.loadMessages();  },  methods: {    loadMessages() {      var self = this;      backend.getMessages().then(function(resp) {        self.previousDate = null;        self.messages = resp.data;        self.openLoader();      });    },    openLoader() {      let loader = this.$loading.show({        loader: 'spinner',        color: '#e32339',        canCancel: true,        container: this.$refs.loadingContainer      });      setTimeout(() => {        loader.hide()      }, 2500)    },  }}我的微调器在容器上显示了 2500 毫秒,但我只是在模拟它而不知道 AJAX 请求何时完成。我完全不明白如何在 AJAX 请求完成之前显示微调器。现在它只显示 2500 毫秒。我的backend.getMessages()方法是这样的:import axios from 'axios'const host = /* process... */export default {  getMessages: function (peer) {    return axios.get(`${host}/api/messages`, {      params: {        me:      localStorage.getItem("user_id"),        device:  localStorage.getItem("device_id"),        peer: peer      }    })   },  //...}
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

加载程序应在您的请求开始之前显示。请注意,当请求完成时axios.get()返回一个Promise解析,因此您可以使用Promise.prototype.finally关闭它Promise来隐藏加载程序:

mounted() {

  // show loader while fetching messages...

  const loader = this.$loading.show()


  backend.getMessages()

    .then(resp => /*...*/)

    .finally(() => loader.hide())

}

async这是用/await编写它的另一种方法:


async mounted() {

  // show loader while fetching messages...

  const loader = this.$loading.show()


  try {

    const resp = await backend.getMessages()

    /*...*/


  } finally {

     loader.hide()

  }

}


查看完整回答
反对 回复 2022-12-09
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

var loading在您的数据中添加一个。

展示<div v-if="loading">Spinner here</div>

然后

getMessages: function (peer) {

    this.loading = true; // AJAX request is loading

    return axios.get(`${host}/api/messages`, {

      params: {

        me:      localStorage.getItem("user_id"),

        device:  localStorage.getItem("device_id"),

        peer: peer

      }

    })

  },



loadMessages() {

      var self = this;

      backend.getMessages().then(function(resp) {

        self.previousDate = null;

        self.messages = resp.data;

        self.openLoader();

        self.loading = false // spinner disappear

      });

    },



查看完整回答
反对 回复 2022-12-09
  • 2 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号