在 VUE 3 的异步方法中调用 SweetAlert2

如何解决在 VUE 3 的异步方法中调用 SweetAlert2

如果从服务器检索数据失败,我试图弹出sweetalert

我在 main.js 中导入了 Sweet Alert :

import VueSweetalert2 from 'vue-sweetalert2'
import 'sweetalert2/dist/sweetalert2.min.css'

const app = createApp(App)
app.use(VueSweetalert2)
app.mount('#app')

在 Table.vue 组件中,我尝试调用 swal,但收到一个错误消息,显示为 (undefined $this.swal) :

<script>
import axios from 'axios'
import { onMounted,ref } from 'vue'

export default {
    setup() {
        let transactions = ref([])

        onMounted(() => {
            getTransactions()
        })

        async function getTransactions() {
            try {
                let { data } = await axios.get('http://127.0.0.1:8000/api/transactions')
                transactions.value = data.data
            } catch(e) {
                this.$swal('Something went wrong.')
            }
        }

        return {
            transactions
        } 

    }
}
</script>

有什么建议可以解决这个问题吗?

解决方法

您不能使用 this 作为 setup() 内的组件实例,因为该组件尚未创建。还有其他方法可以获取该 $swal 属性。

vue-sweetalert2 通过 app.config.globalProperties.$swal 或作为 provide-ed $swal prop 公开 SweetAlert。

在 Composition API 中使用它的一种简单方法是通过 inject()

import { inject } from 'vue'

export default {
    setup() {
        const swal = inject('$swal')

        async function getTransactions() {
            //...
            swal('Something went wrong.')
        }
    }
}

demo 1

但是,vue-sweetalert2 文档建议在这种情况下直接使用 sweetalert2

当使用“Vue3:Composition API”时,最好不要使用这个包装器。直接调用sweetalert2更实用。

您可以像这样直接使用 sweetalert2

import { onMounted,inject } from 'vue'
import Swal from 'sweetalert2'

export default {
  name: 'App',setup() {
    async function getTransactions() {
      //...
      Swal.fire('Something went wrong.')
    }

    onMounted(() => getTransactions())
  }
}

demo 2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?