在函数中访问vue可组合示例?

a2mppw5e  于 2023-03-24  发布在  Vue.js
关注(0)|答案(1)|浏览(213)

假设我有一个简单的vue可组合函数,我想在我的应用程序中多次重用它。在这种情况下,它有一个React性属性(products,一个包含产品列表的数组)和一个方法“addProduct”,它将一个新元素推入数组。

export function useCart(){
    const products = ref([])

    const addProduct() =>{
        products.push({item: "Baseball Cap", quantity: 1})
    }

    return {
        products,
        addProduct
    }
}

这很好,但是,我想将cart composable的示例传递给每一行,这样这一行就可以通过属性“cart”访问父“cart”。
我希望下面的工作。我相信“this”应该引用调用函数的对象(cart的示例):

export function useCart(){
    const products = ref([])

    const addProduct() =>{
        //this should be the instance of the cart composable?
        products.push({item: "Baseball Cap", quantity: 1, cart: this})
    }

    return {
        products,
        addProduct
    }
}

然而,当我在使用可组合组件的组件中进行测试时,“this”的值是未定义的:

const testCart = useCart
testCart.addProduct()

为什么“this”在这个上下文中未定义,我如何访问可组合方法中的可组合示例?

cnjp1d6j

cnjp1d6j1#

如果你做得对,它就会起作用。
但是必须使用functions()而不是lambdas,因为lambdas没有上下文,而this = window没有上下文。

const addProduct = function() {
    //this should be the instance of the cart composable?
    products.value.push({item: "Baseball Cap", quantity: 1, cart: this})
}

但是我很难从.cart属性使用this上下文。
就像cart.products.value[0].cart.products,它就是不起作用。
我建议你重新考虑一下这个设计。我不会那样做的。
去操场看看。第二次是窗口。
x一个一个一个一个x一个一个二个x

相关问题