在 Vuex store 中使用全局变量
Using global variables inside Vuex store
我将自定义全局变量注入到 vue 中。你可以看下面的代码。
export default function (props, inject) {
inject('models', {
register(name) {
const model = require(`@/models/${name}.js`)
model.default(props, inject)
}
})
}
这有效,我使用它没有问题,唯一的问题是将它们加载到 vuex 商店时。我使用的是 Nuxt.js,其中商店与 vue.js 有点不同,但它的工作原理几乎相同。
我在 存储文件夹 中的 products.js 看起来像这样:
export const state = () => ({
products: [],
})
export const getters = {
get_product: state => async id => {
let loadedProduct = state.products.find(p => p.id == id)
let isAllreadyLoaded = loadedProduct != null ? loadedProduct : false
if(isAllreadyLoaded)
{
return loadedProduct
}
else
{
let fetchedProduct = await this.$products.find(id)
return fetchedProduct
}
}
}
我只是先检查缓存中是否已经有该产品,如果是,我想return那个产品,否则我想获取一个产品。 但是,我在 this.$products 上遇到错误。错误说:
TypeError: Cannot read properties of undefined (reading '$products').
这就是我访问我的商店的方式:
async asyncData({store, params, $products}) {
let product = await store.getters['products/get_product'](params.id)
return {
product
}
},
我已经尝试在 vuex 商店中使用 Vue.prototype.$products 而不是 this.$products,但不幸的是这没有帮助。任何解决方案? 我需要在 vuex store 中使用一个全局变量
在 Nuxt 中它的工作方式不同,你必须制作一个插件然后在那里注入它。
参见:https://nuxtjs.org/docs/directory-structure/plugins/#inject-in-root--context
同时,我自己也做了一些尝试。我发现的也许可以帮助其他人解决同样的问题。
在 vuex store 中你不能访问自定义的全局注入变量,但是你可以访问主 window 变量。我发现,在 window
中插入了一个 $nuxtjs
属性,因此您可以使用以下方法访问全局 nuxt 变量:
let mycustomvariable = "$products"
window.$nuxt[mycustomvariable]
我将自定义全局变量注入到 vue 中。你可以看下面的代码。
export default function (props, inject) {
inject('models', {
register(name) {
const model = require(`@/models/${name}.js`)
model.default(props, inject)
}
})
}
这有效,我使用它没有问题,唯一的问题是将它们加载到 vuex 商店时。我使用的是 Nuxt.js,其中商店与 vue.js 有点不同,但它的工作原理几乎相同。 我在 存储文件夹 中的 products.js 看起来像这样:
export const state = () => ({
products: [],
})
export const getters = {
get_product: state => async id => {
let loadedProduct = state.products.find(p => p.id == id)
let isAllreadyLoaded = loadedProduct != null ? loadedProduct : false
if(isAllreadyLoaded)
{
return loadedProduct
}
else
{
let fetchedProduct = await this.$products.find(id)
return fetchedProduct
}
}
}
我只是先检查缓存中是否已经有该产品,如果是,我想return那个产品,否则我想获取一个产品。 但是,我在 this.$products 上遇到错误。错误说:
TypeError: Cannot read properties of undefined (reading '$products').
这就是我访问我的商店的方式:
async asyncData({store, params, $products}) {
let product = await store.getters['products/get_product'](params.id)
return {
product
}
},
我已经尝试在 vuex 商店中使用 Vue.prototype.$products 而不是 this.$products,但不幸的是这没有帮助。任何解决方案? 我需要在 vuex store 中使用一个全局变量
在 Nuxt 中它的工作方式不同,你必须制作一个插件然后在那里注入它。
参见:https://nuxtjs.org/docs/directory-structure/plugins/#inject-in-root--context
同时,我自己也做了一些尝试。我发现的也许可以帮助其他人解决同样的问题。
在 vuex store 中你不能访问自定义的全局注入变量,但是你可以访问主 window 变量。我发现,在 window
中插入了一个 $nuxtjs
属性,因此您可以使用以下方法访问全局 nuxt 变量:
let mycustomvariable = "$products"
window.$nuxt[mycustomvariable]