Vue中$emit调用父组件异步方法模拟.then实现方式

 更新时间:2024年09月03日 08:44:22   作者:果粒橙er  
这篇文章主要介绍了Vue中$emit调用父组件异步方法模拟.then实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

$emit调用父组件异步方法模拟.then实现

需求

有一个封装好的弹窗子组件,点确认时$emit父组件删除方法,父组件删除接口调用成功后需要调用子组件close()方法。

  • 方法:1可以直接$refs.dialog.close()关闭弹窗
  • 方法2:可以模拟.then在子组件实现这一逻辑

父组件事件:

    delConfirm(params, callback) {
   	  // reqName是请求名
      reqName(params).then(res => {
        if (res.success) {
          this.$message.success('删除成功!')
          callback() // 回调子组件关闭弹窗
          this.getList() // 删除一条后刷新列表
        }
      })
    },

子组件确认按钮事件:

    confirm() {
      // params是携带的参数 传给父组件 callback后回调的内容是close()方法
      this.$emit('delConfirm', this.params, () => {
        this.close()
      })
    }

$emit调用父组件异步方法,返回结果后再执行子组件的方法

现象

子组件请求父组件的方法,触发数据更新,待数据返回后,才能进行后续的操作

解决

使用回调函数的方式

父组件:

 async getTaskListDetails(callback = () => {}) {
      const { pageSize, currentPage } = this.pagination
      const [res, err] = await taskListDetails({
        limit: pageSize,
        start: pageSize * (currentPage - 1)
      })
      if (err) return this.$message.error(err?.msg || '请求失败')
      if (res.code !== 200) return this.$message.error(res?.msg || '请求失败')
      this.dataList = res?.data?.list || []
      this.mainTask = res.data.main_task
      this.pagination.total = res.data.count
      callback(this.dataList)
 }

子组件:

  this.$emit('updateList', (res) => {
        this.checkTaskProgress(res)
  })

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • html2canvas使用文档(vue举例)

    html2canvas使用文档(vue举例)

    html2canvas.js是一款可以在网页上实现页面截图的js,它使用了html5和css3的一些新功能特性,实现了在客户端对网页进行截图的功能,这篇文章主要给大家介绍了关于html2canvas使用的相关资料,需要的朋友可以参考下
    2024-03-03
  • vue2.0 better-scroll 实现移动端滑动的示例代码

    vue2.0 better-scroll 实现移动端滑动的示例代码

    本篇文章主要介绍了vue2.0 better-scroll 实现移动端滑动的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2018-01-01
  • 深入详解Vue中的路由懒加载

    深入详解Vue中的路由懒加载

    路由懒加载是一种优化技术,用于延迟加载应用程序中的路由组件,它可以提高初始加载速度并减少资源消耗,特别适用于大型单页应用,下面我们就来看看它的原理与使用吧
    2023-08-08
  • vue3项目使用pinia状态管理器的使用

    vue3项目使用pinia状态管理器的使用

    Pinia是一个专为Vue3设计的现代化状态管理库,本文主要介绍了vue3项目使用pinia状态管理器的使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 一款移动优先的Solid.js路由solid router stack使用详解

    一款移动优先的Solid.js路由solid router stack使用详解

    这篇文章主要为大家介绍了一款移动优先的Solid.js路由solid router stack使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • vue 优化CDN加速的方法示例

    vue 优化CDN加速的方法示例

    这篇文章主要介绍了vue 优化CDN加速的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue 3.0的attribute强制行为理解学习

    Vue 3.0的attribute强制行为理解学习

    这篇文章主要为大家介绍了Vue 3.0的attribute强制行为理解学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 用vue-cli开发vue时的代理设置方法

    用vue-cli开发vue时的代理设置方法

    今天小编就为大家分享一篇用vue-cli开发vue时的代理设置方法,具有很好的参考价值。希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue使用自定义指令实现页面底部加水印

    Vue使用自定义指令实现页面底部加水印

    本文主要实现给项目的整个背景加上自定义水印,可以改变水印的文案和字体颜色等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Vue中使用Element UI的Table组件实现嵌套表格功能

    Vue中使用Element UI的Table组件实现嵌套表格功能

    这篇文章主要介绍了Vue中使用Element UI的Table组件实现嵌套表格功能,演示如何在Vue中使用Element UI的Table组件实现嵌套表格,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论