我有产品列表页,在那里我使用多个ProductCard组件.我需要添加Spinner添加到购物车按钮时,点击它,但如果我只是添加Spinnerv-else,我有Spinners在每ProductCard.如何只控制这ProductCard个我点击添加到购物车按钮的地方?

父组件:

<ProductCard
  v-for="product in products"
  :key="product.id"
  :product="product"
/>

子组件:

<template>
  <div id="productCart">
    <div>
      <NuxtLink :to="`/product/${item.slug}`" />
      <NuxtLink v-if="item.name" :to="`/product/${item.slug}`">
        <h5
          id="productName"
          v-text="item.name"
        />
      </NuxtLink>
      <Button
        v-if="!loading"
        @click="addToBuyCart({ product: item })"
        v-text="$t('labels.buy')"
      />
      <Spinner v-else />
    </div>
  </div>
</template>

loading在Composable中定义,并在addToBuyCart函数中更新,方法是使其为真,然后添加到购物车(API),然后将其设为假

推荐答案

正如IVO所指出的,在这种情况下,您应该判断循环中每个项的特定值,例如项ID,而不是布尔值,因为布尔值缺乏特殊性,因此不能用于此类场景.

<template>
  <div id="productCart">
    <div>
      <NuxtLink :to="`/product/${item.slug}`" />
      <NuxtLink v-if="item.name" :to="`/product/${item.slug}`">
        <h5
          id="productName"
          v-text="item.name"
        />
      </NuxtLink>
      <Button
        v-if="loading !== item.id"
        @click="addToBuyCart({ product: item })"
        v-text="$t('labels.buy')"
      />
      <Spinner v-else />
    </div>
  </div>
</template>

const addToBuyCart = ({product}) => {
  loading = product.id
  // some logic or request
  loading = null
}

Vue.js相关问答推荐

当props 的值改变时如何更新类'

如何将 cogo toast PRIVE集成到nuxt3中?

保持页面重新加载之间的状态

写入计算值时出错,但我没有写入任何值

Nuxt3-Vue中的useRoute和useRouter有什么区别

在 Ajax 函数中访问 Vue.js 组件属性

如何在 vue 组件中定义变量? (Vue.JS 2)

如何使用 vue 或 javascript 向服务器发送密码?

Vue:需要禁用页面上的所有输入

Vuetify - 如何保持第一个扩展面板默认打开,如果我打开另一个面板,其他面板应该关闭?

Polyfill for ie

VueJS + VueRouter:有条件地禁用路由

带有子菜单的 Vuetify 导航抽屉

Vuejs模板继承

如何克隆props对象并使其无react

Vue.JS 2.0 修改不相关数据时速度慢

用于 nuxt.js 构建的自定义 index.html

我们可以像在 Angular 中一样创建 Vue.js 组件时将 HTML、JS 和 CSS 文件分开吗?

使用 Vee-validate 禁用按钮,直到正确填写表单

Vue 3 组合 API 数据()函数