RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1019613
Accepted
Родион Поляков
Родион Поляков
Asked:2020-09-02 18:45:06 +0000 UTC2020-09-02 18:45:06 +0000 UTC 2020-09-02 18:45:06 +0000 UTC

如何确定按下了哪个按钮?

  • 772

如果是目录组件、产品模块和类似于购物车的东西。产品模块存储所有产品的列表,订单模块存储已购买产品的Id和数量。如何确定特定产品的“购买”按钮已被点击,显示有关它的消息并使按钮无效(禁用)?对于代码的任何评论,业力的巨大加分,谢谢!

目录.vue

<template>
    <b-row>
        <b-col sm="6" lg="4" xl="3" v-for="product in products" :key="product.id">
            <div class="image" v-lazy:background-image="product.image">
                Видно если нажали "Купить".
            </div>
            <div class="d-flex justify-content-between">
                <div>
                    <p class="mb-0">{{product.name}}</p>
                    <p class="mb-0">{{product.price}} грн.</p>
                </div>
                <b-button class="align-self-center" variant="outline-dark" @click="buyProduct(product.id)">Купить</b-button>
            </div>
        </b-col>
    </b-row>
</template>

<script>
    import { BRow, BCol, BButton } from 'bootstrap-vue'
    import { mapState, mapActions } from 'vuex'

    export default {
        components: {
            BRow,
            BCol,
            BButton
        },
        computed: mapState({
            products: state => state.product.all
        }),
        methods: {
            ...mapActions('order', ['buyProduct'])
        }
    }
</script>

产品.js

import axios from 'axios'

export default {
    namespaced: true,
    strict: true,

    state: {
        page: 1,
        all: []
    },

    mutations: {
        incrementPage: (state) => {
            state.page++
        },
        addToAllProducts: (state, products) => {
            state.all.push(...products)
        }
    },

    actions: {
        getFourProducts: (context, $state) => {
            axios.get('http://api.local/api/products', {
                params: {
                    page: context.state.page
                },
            }).then(({ data }) => {
                if (data.data.length) {
                    context.commit('incrementPage')
                    context.commit('addToAllProducts', data.data)
                    $state.loaded()
                } else {
                    $state.complete()
                }
            })
        }
    }
}

order.js

export default {
    namespaced: true,
    strict: true,

    state: {
        all: []
    },

    mutations: {
        addToOrder(state, id) {
            state.all.push({
                id,
                quantity: 1
            })
        }
    },

    actions: {
        buyProduct(context, id) {
            context.commit('addToOrder', id)
        }
    }
}
vue.js
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Adrug
    2020-09-02T20:34:10Z2020-09-02T20:34:10Z

    我想这就够了。没查,因为 你需要收集一个沙盒,但你没有提供你的。注意checkOrder(product.id)我添加的方法。

    <template>
        <b-row>
            <b-col sm="6" lg="4" xl="3" v-for="product in products" :key="product.id">
                <div class="image" v-if="checkOrder(product.id)" v-lazy:background-image="product.image">
                    Видно если нажали "Купить".
                </div>
                <div class="d-flex justify-content-between">
                    <div>
                        <p class="mb-0">{{product.name}}</p>
                        <p class="mb-0">{{product.price}} грн.</p>
                    </div>
                    <b-button class="align-self-center" variant="outline-dark" :disabled="checkOrder(product.id)" @click="buyProduct(product.id)">Купить</b-button>
                </div>
            </b-col>
        </b-row>
    </template>
    
    <script>
        import { BRow, BCol, BButton } from 'bootstrap-vue'
        import { mapState, mapActions } from 'vuex'
    
        export default {
            components: {
                BRow,
                BCol,
                BButton
            },
            computed: mapState({
                products: state => state.product.all,
                orderProducts: state => state.order.all
            }),
            methods: {
                ...mapActions('order', ['buyProduct']),
                checkOrder(id) {
                  return this.orderProducts.some(p => p.id == id);
                }
            }
        }
    </script>
    
    • 1

相关问题

  • 为什么单击与该方法无关的按钮时会调用该方法?

  • Vue js如何让表格滑动顺畅

  • Vue.js 复选框问题

  • 如何在 nuxt 中将 html 添加到翻译中?

  • 如何给v-dialog组件属性border-radius:10px?

  • 快递发送vue模板邮件

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5