Inyecté variables globales personalizadas en vue. Puedes ver el código a continuación.
export default function (props, inject) { inject('models', { register(name) { const model = require(`@/models/${name}.js`) model.default(props, inject) } }) }esto funciona y no tengo problemas para usarlo, el único problema es al cargarlos en la tienda vuex. Estoy usando Nuxt.js donde la tienda es un poco diferente a vue.js, pero casi funciona igual. my products.js en la carpeta de la tienda se ve así:
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 } } }Simplemente verifico primero si ya tengo el producto en caché, si es así, quiero devolver ese producto, de lo contrario, quiero buscar un producto. Pero recibo un error en this.$products. El error dijo:
TypeError: Cannot read properties of undefined (reading '$products').y así es como estoy accediendo a mi tienda:
async asyncData({store, params, $products}) { let product = await store.getters['products/get_product'](params.id) return { product } },Ya intenté usar Vue.prototype.$products en lugar de this.$products en la tienda vuex, pero desafortunadamente esto no ayudó. ¿Alguna solución? Necesito usar una variable global dentro de la tienda vuex
En Nuxt funciona diferente, tienes que hacer un complemento y luego inyectarlo allí.
Ver: https://nuxtjs.org/docs/directory-structure/plugins/#inject-in-root--context
Mientras tanto, probé algunas cosas yo mismo. Lo que encontré es quizás algo que podría ayudar a otros con el mismo problema.
En la tienda vuex no puede acceder a las variables inyectadas globales personalizadas, pero puede acceder a la variable de la ventana principal. Lo que descubrí fue que hay una propiedad $nuxtjs insertada en window , por lo que puede acceder a las variables globales de nuxt usando:
let mycustomvariable = "$products" window.$nuxt[mycustomvariable]