Javascript 如何从nuxt.js商店访问插件?

Javascript 如何从nuxt.js商店访问插件?,javascript,vue.js,vuex,nuxt.js,gtag.js,Javascript,Vue.js,Vuex,Nuxt.js,Gtag.js,我有这个gtag分析插件,我可以访问我的组件,但从来没有在我的商店。 如果您有任何意见,我将不胜感激。谢谢 插件/vue-gtag.js import Vue from "vue" import VueGtag from "vue-gtag" export default ({ app }, inject) => { Vue.use(VueGtag, { config: { id: process.env.ga_stream

我有这个gtag分析插件,我可以访问我的组件,但从来没有在我的商店。 如果您有任何意见,我将不胜感激。谢谢

插件/vue-gtag.js

import Vue from "vue"
import VueGtag from "vue-gtag"

export default ({ app }, inject) => {
  Vue.use(VueGtag, {
    config: {
      id: process.env.ga_stream_id
    }
  })
}

store/gaUserProperty.js

import Vue from "vue"
import { User } from "~/models/user/User"

export const states = () => ({})

const getterObjects = {}
const mutationObjects = {}
Object.keys(states).forEach(key => {
  getterObjects[key] = state => state[key]
  mutationObjects[key] = (state, value) => (state[key] = value)
})

export const state = () => states

export const getters = { ...getterObjects }

export const mutations = { ...mutationObjects }

export const actions = {
  async sendUserProperties({ dispatch, commit }) {
    let res = await this.$UserApi.getUser()
    if (!(res instanceof User)) {
    } else {
      // I can access this on my components and pages but for some reason not here....
      console.log(this.$gtag)
    }
  }
}


您可以通过此访问Vue实例。\u Vuex存储中的虚拟机,因此您只需执行以下操作:

console.logthis._vm.$gtag
这应该可以解决问题。

要正确导入,我将从main.ts|js导出实例或其任何内部构件:

现在,您可以在商店中导入它:

import Instance from '@/main';
// or: 
import { $gtag } from '@/main';

// use Instance.$gtag or $gtag, depending on what you imported.
正如其他答案所提到的,在当前的Vuex版本中,Vue实例在存储区内的这个虚拟机下可用。不过,我不想依赖它,因为它不是公开的Vuex API的一部分,也没有任何文档记录。换句话说,Vuex开发人员不能保证它在将来的版本中仍然存在。 更具体地说,Vue的承诺是所有v2代码都将在v3中工作。但前提是使用公开的API


这里的讨论甚至不是关于它是否会被删除,它很可能不会被删除。对我来说,这更多的是一个原则问题:如果它以a开头,并且没有文档记录,那么它将转化为作者的一条信息:我们保留随时更改此内容的权利,恕不另行通知

你能说出nuxt中main.js的等价物吗?我找不到一个:从Vue导入Vue从Vue gtag Vue.USEVUEGTTAG导入VUEGTTAG,{config:{id:process.env.ga_stream_id}}导出默认ctx,inject=>{ctx.$gtag=Vue.$gtag injectgtag,Vue.$gtag injectgtag,Vue.$gtag}它工作得很好,但文档中没有它这一事实让我担心。还有其他方法吗?@obliviousfella它是Vue.js的内部属性,因此它实际上没有文档记录,但它是Vue.js核心功能的一个元素。我知道其他答案中的观察结果,但我也是接吻原则的拥护者,但无论如何,我想这是一个选择哪种解决方案更适合你的特殊需要的问题。
import Instance from '@/main';
// or: 
import { $gtag } from '@/main';

// use Instance.$gtag or $gtag, depending on what you imported.