如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例?

2024-05-03

我正在尝试使用@vue/apollo-可组合 https://v4.apollo.vuejs.org/guide-composable/setup.html#_1-install-vue-apollo-composable与我的 Nuxt-Ts 应用程序。这是如何将其注入“普通”Vue 应用程序上的根实例的示例:

import { provide } from '@vue/composition-api'
import { DefaultApolloClient } from '@vue/apollo-composable'

const app = new Vue({
  setup () {
    provide(DefaultApolloClient, apolloClient)
  },

  render: h => h(App),
})

Problem:我不知道如何访问根实例在 Nuxt-TS 中.

我尝试制作一个插件,但它要么直接注入到根实例中(这是不对的,因为@vue/apollo-composable正在使用composition-api::provide() https://vue-composition-api-rfc.netlify.com/#plugin-development它创造了自己的财产_provided.

如果我使用 nuxt 插件inject a $得到连接。如果我写一个_provided对象直接在via中ctx.app._provided =它不粘。

import { DefaultApolloClient } from "@vue/apollo-composable";
const myPlugin: Plugin = (context, inject) => {
  const defaultClient = ctx.app.apolloProvider.defaultClient;
  inject(DefaultApolloClient.toString(), defaultClient) // results in $$ and also composition-api::inject is checking inside `_provided[DefaultApolloClient]`
}

export default myPlugin

我无法打电话provide()就像原来的例子一样,因为它只允许在VueComponent::setup功能。

我还尝试创建一个组件,然后在我需要它的页面上使用它(虽然有点违背了在根实例中安装的目的)

const InstallGraphQl = createComponent({
  name: "InstallGraphQl",
  setup(_props, ctx: any) {
    debugger;
    const apolloClient = ctx.app.apolloProvider.defaultClient;
    ctx.provide(DefaultApolloClient, apolloClient);
  },
});
export default createComponent({
  name: "DefaultLayout",
  components: {
    InstallGraphQl
  },
  setup(_props, _ctx: SetupContext) {
    const { result } = useQuery(SharedLayoutQuery);
    return { result };
  },
});

但是之后setup导出的组件的数量之前被调用过InstallGraphQl::setup...

编辑:还可以了解更多信息@vue/apollo-composable请参阅此处的讨论:https://github.com/vuejs/vue-apollo/issues/687 https://github.com/vuejs/vue-apollo/issues/687


只需设置一个setup()到根选项:

/* plugins/provide-apollo-client.js */

import {provide} from '@vue/composition-api'
import {DefaultApolloClient} from '@vue/apollo-composable'

export default function ({app}) {
  app.setup = () => {
    provide(DefaultApolloClient, ...)
  }

  // Or, use local mixin
  app.mixins = (app.mixins || []).concat({
    setup () {...},
  })
}
/* nuxt.config.js */

export default {
  plugins: ['~/plugins/provide-apollo-client'],
}

虽然对 nuxt-ts 不太熟悉,但我认为代码应该可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例? 的相关文章

随机推荐

  • Selenium RC:如何检查元素是否具有给定属性?

    我有一些带有onclick属性和一些没有属性 我想检查指定的元素是否具有onclick属性 我怎样才能做到这一点 getAttribute 当有属性值时返回该属性值 如果没有 它会抛出 RuntimeException 并停止测试 即使我将
  • Owncloud上传文件到特定文件夹-curl

    我想通过我自己的云服务器上的特定文件夹中的curl上传文件 例如 http www myowncloudserver com remote php webdav MY FOLDER 目前我无法将文件上传到我自己的云服务器上的文件夹 有任何想
  • ASP.NET 列表视图->单击行->执行操作

    我需要以下方面的帮助 我有一个用隐藏代码填充的列表视图 Linq gt Sql ListView1 DataSource from x in database ITEMS select x ListView1 DataBind 项目内容 I
  • Python打开Microsoft SQL Server MDF文件

    如何在 Python 中打开 Microsoft SQL Server MDF 文件 Edit 我试过了pyodbc connect但这需要合法的 服务器连接 您不能简单地打开 MDF 文件 pyodbc connect driver SQ
  • 如何在 C# 中的 HttpClient 中使用凭据?

    我在使用 HttpClient 类访问 Delicious API 时遇到一些问题 我有以下代码 try const string uriSources https api del icio us v1 tags bundles all p
  • ASP.Net Core,检测控制器中的调试与不调试

    我正在编写我的第一个 ASP Net 代码 Web 应用程序 在我的控制器中我希望有一个if检查我是否处于调试模式的语句 我知道在 Startup cs 文件中我可以检查env IsDevelopment 但那是因为IHostingEnvi
  • 多维数组到数据框

    R 中的以下问题对你们中的许多人来说可能看起来很简单 但由于我对此相对较新 如果您能帮助我 那将非常有帮助 我想本质上编写一个多维 3 个维度 数组作为我可以更轻松地操作的数据框 我正在处理 1891 年 1 月 1 日至 2015 年 1
  • 使用 Google App Engine 和 ndb 时是否见过重复的 ID?

    class Entries ndb Model description ndb StringProperty seqid ndb IntegerProperty link ndb StringProperty group ndb Strin
  • 使用位图的保存方法覆盖图像

    我有一个 ASP NET C 页面 我正在其中调整文件夹中图像的大小 我正在使用 GDI 来执行此操作 我想调整图像大小并替换为旧图像 因此 当我尝试使用现有名称保存时 Save 方法会抛出错误 但如果我给出不同的名称 它就会被保存 但我希
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • 在 ggplot2 facet_wrap 标签上使用半填充的正方形

    我正在尝试使用标签上的一半 以及四分之一填充 方块来生成 ggplot2 图表 但 Mac 上的 ggplot2 似乎不支持某些符号 例如 当我输入 print u25E9 它显示一个半黑的正方形 但是当我尝试在 ggplot 中使用它时
  • 如何检查一组行中是否至少有一个具有特定值

    我需要找到属于满足特定条件的任何组的所有行 我将组定义为共享 组 列中的值的几行 相关组必须至少包含一行且 Eligible 设置为 true 并且该组中至少有两行在 Group 或 Eligible 以外的任何列中必须彼此不同 示例表 G
  • 为什么 ThreadLocal 实用程序在 Spring MVC 应用程序中总是返回 null?

    我编写了这个实用程序类来在 Spring MVC 应用程序中保存临时数据 public abstract class FooUtil private static final ThreadLocal
  • 对 python 2.7 的支持结束了吗?

    是否有一个已知的日期 时间范围 将不再支持 python 2 7 转而支持 python 3 截至 2014 年 4 月 13 日 从http hg python org peps rev 76d43e52d978 http hg pyth
  • ruby 1.9 如何将数组转换为不带括号的字符串

    我的问题是关于如何在 ruby 1 9 中将数组元素转换为字符串而不需要括号和引号 我有一个数组 数据库提取 我想用它来创建定期报告 myArray Apple Pear Banana 2 15 12 在 ruby 1 8 中我有以下行 r
  • 如何让iOS 7下的UISwitch不采用其后面视图的背景颜色?

    关闭时看起来像这样 虽然我更喜欢灰色背景 我真的必须使用 UIImageView 吗 以下是我更改 iOS7 UISwitch 的填充颜色的方法 首先您需要导入 QuartzCore import
  • C++中的引用类型是POD类型吗?

    C 中的引用类型也是POD类型吗 是int 是POD类型吗 那么呢 struct Q int i 有人可以帮助我吗 No 设置引用某些内容的成员的唯一方法是通过用户声明的构造函数 因此 您的结构是非 POD 的 Update 答案仍然是否定
  • 如何检查并关闭Excel文件是否已在Java中打开[重复]

    这个问题在这里已经有答案了 可能的重复 Java 检查文件是否已打开 https stackoverflow com questions 1390592 java check if file is already open 我正在制作一个
  • limit 关键字在 gcc/g++ 中是否提供了显着的好处?

    有没有人见过关于是否使用 C C 的任何数字 分析restrictgcc g 中的关键字实际上在现实中 而不仅仅是理论上 提供了任何显着的性能提升 我读过各种推荐 贬低其使用的文章 但我还没有遇到任何实际数字可以证明双方的论点 EDIT 我
  • 如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例?

    我正在尝试使用 vue apollo 可组合 https v4 apollo vuejs org guide composable setup html 1 install vue apollo composable与我的 Nuxt Ts