当前位置: 首页 > 知识库问答 >
问题:

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

申屠宗清
2023-03-14

如果无法从服务器检索数据,我尝试弹出sweetalert

我在main.js中导入了甜蜜警报:

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

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

在桌子里面。我试图调用swal的vue组件,但出现了一个错误,改为(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>

有什么建议如何解决这个问题吗?

共有2个答案

长孙逸仙
2023-03-14

main中。js文件

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

const app = createApp(App);

app.use(VueSweetalert2);
window.Swal =  app.config.globalProperties.$swal;
app.mount("#app");

使用Swal。fire()内部合成API

export default {
  setup() {
    function yourFunctionName() {
      Swal.fire('Hello !')
    }
  }
}
裴畅
2023-03-14

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

vue-Sweetalert2通过app.config.global属性公开SweetAlert。$swal或作为提供-ed$swal道具。

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

import { inject } from 'vue'

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

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

演示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())
  }
}

演示2

 类似资料:
  • 没有await并且在非异步方法中调用异步方法的行为是什么?我这样问是因为我看到Visual Studio在调用异步方法时没有显示任何警告,好像这是一件非常正常的事情。在这种情况下,异步方法的行为是否像是同步的?

  • 同步调用异步方法最安全的方法是什么?

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 问题内容: 我使用的是Spring 4,我注意到了一个奇怪的行为……如果我从普通实例方法多次调用异步方法,那么它们都将在不同的线程中调用,并在随机时间完成。但是,如果我多次从另一个异步方法中调用一个异步方法,那么它们将按顺序完成。我有这样的事情: 我正在使用默认的异步执行器。我应该换一个吗?但是,该执行程序不会重用任何线程,而是每次都启动另一个线程,因此应该没问题……这仅仅是巧合吗?但是我尝试了十

  • 问题内容: 我在数组上进行映射,对于新对象的返回值之一,我需要进行异步调用。 该功能的实现将类似于 我不清楚做到这一点的最佳方法是什么…承诺?嵌套的回调?在ES6或ES7中使用某些东西,然后与Babel进行转换? 目前实现此目的的最佳方法是什么? 谢谢! 问题答案: 一种方法是(ES6)。 该答案将在Node 4.0+中起作用。较旧的版本将需要Promise polyfill或库。我还使用了ES6