组合api使用这个

Posted

技术标签:

【中文标题】组合api使用这个【英文标题】:Composition api use this 【发布时间】:2021-04-10 14:51:27 【问题描述】:

我正在使用带有 Composition API 的 Vue 3,并且我想使用第三方包(例如 @meforma/vue-toaster),它应该像这样使用(在 Options API 中):

import Toaster from '@meforma/vue-toaster';

createApp(App).use(Toaster).mount('#app')

然后在组件中:

this.$toast.show(`Hey! I'm here`);
this.$toast.success(`Hey! I'm here`);
this.$toast.error(`Hey! I'm here`);
this.$toast.warning(`Hey! I'm here`);
this.$toast.info(`Hey! I'm here`);

但是 this 在 Composition API 的 setup() 函数中不起作用。

【问题讨论】:

【参考方案1】:

@meforma/vue-toaster installs $toast on the application context,可以从setup()中的getCurrentInstance().ctx访问:

<template>
  <button @click="showToast">Show toast</button>
</template>

<script>
import  getCurrentInstance  from 'vue'

export default 
  setup() 
    const $toast = getCurrentInstance().ctx.$toast
    return 
      showToast() 
        $toast.show(`Hey! I'm here`)
        $toast.success(`Hey! I'm here`)
        $toast.error(`Hey! I'm here`)
        $toast.warning(`Hey! I'm here`)
        $toast.info(`Hey! I'm here`)
        setTimeout($toast.clear, 3000)
      
    
  

</script>

【讨论】:

@yetanothercoder 更新了解释的答案。 @meforma/vue-toaster 在上下文中安装$toast,可以从setup() 访问。【参考方案2】:

setup 函数在组件创建之前运行一次。它缺少this 上下文,并且可能不是您想要放置这些的地方。您可以尝试将其放入可以通过按钮调用的方法中。

【讨论】:

以上是关于组合api使用这个的主要内容,如果未能解决你的问题,请参考以下文章

组合式api

使用组合 API 共享道具

熬夜讲解vue3组合API中setup refreactive的用法

显示组合数组中的文本标签(使用 API)

Vue3 $emit指南--包含选项API组合API以及 setup 语法糖

在 Vue 3 中使用 Jest 测试 Apollo 客户端 API(组合 API)