易者
易者
  • 发布:2023-07-27 20:43
  • 更新:2023-07-28 15:52
  • 阅读:951

请教uni-number-box组件数字显示的问题

分类:uni-app

代码如下:

<view class="myrow">  
    <text class="cartnum">{{item.num}}</text>  
    <uni-number-box v-model="item.num" :value="item.num" :min="0" color="#000"  @blur="" @focus="" @change="cartnum($event,item,index)"/>  
</view>

图示如下:
图一


图二

在图一中的第三行点击减号删除第三行后,原第四行变为第三行,如图二所示,text中的数字显示正常,但uni-number-box组件中的数字变为0,这是不正常的,参考代码中的变量值。点击上面的每一行都是同样的问题,

请教应该如何使uni-number-box组件中的数字正常显示?

2023-07-27 20:43 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

用id作为key 就可以了

<template>  
    <view class="mymain">  
        <template :key="item.id" v-for="(item,index) in cart">  
            <view  class="myrow">  
                <text class="cartnum">{{item.num}}</text>  
                <uni-number-box v-model="item.num" :min="0" color="#000" @blur="" @focus=""  
                    @change="cartnum($event,item,index)" />  
            </view>  
        </template>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                cart: [{  
                    num: 1,  
                    id:'1'  
                }, {  
                    num: 1,  
                    id:'2'  
                }, {  
                    num: 1,  
                    id:'3'  
                }, {  
                    num: 1,  
                    id:'4'  
                }]  
            }  
        },  
        methods: {  
            cartnum(num, item, index) {  
                let tmpcart = this.cart;  
                if (num > 0) {  
                    tmpcart[index].num = num;  
                    this.cart = tmpcart;  
                } else {  
                    if (this.cart.length > 1) {  
                        tmpcart.splice(index, 1);  
                        this.cart = tmpcart;  
                    } else {  
                        let that = this;  
                        uni.showModal({  
                            title: '提示',  
                            content: '即将清空您的购物车!',  
                            showCancel: false,  
                            success: function(res) {  
                                if (res.confirm) {  
                                    that.cart = [];  
                                }  
                            }  
                        });  
                    }  
                }  
            }  
        }  
    }  
</script>  

<style>  
    .mymain {  
        width: 100%;  
        display: flex;  
        flex-direction: column;  
        align-items: center;  
        justify-content: center;  
        position: fixed;  
        top: 20%;  
    }  

    .myrow {  
        display: flex;  
        flex-direction: row;  
        align-items: center;  
        justify-content: center;  
    }  

    .cartnum {  
        margin: 0rpx 26rpx;  
    }  
</style>  
  • 易者 (作者)

    确实是没有绑定key的问题,都怪我!template标签绑定key报错,换成block标签即可。问题已解决,非常感谢爱豆豆!

    2023-07-29 16:13

  • 易者 (作者)

    我绑定key后测试了一下H5、微信小程序、抖音小程序都正常,就是快手小程序还存在本帖描述的问题,咋办呢?

    2023-07-29 19:22

  • 爱豆豆

    回复 易者: 快手小程序没有测试号 我没法测试 还得企业主体才可以注册小程序。或者你提供一个快手小程序账号给我测试一下

    2023-07-31 09:58

  • 易者 (作者)

    回复 爱豆豆: 是需要快手APPID吗?我给你发私信没权限。

    2023-07-31 20:20

  • 爱豆豆

    回复 易者: 你加我qq 2087592068

    2023-08-01 09:24

爱豆豆

爱豆豆 - 办法总比困难多

你这两行代码我循环测试然后删除 也没办法复现出来 可以吧代码片段发的全一点吗?看下是不是你的代码逻辑有问题

  • 易者 (作者)

    我把简化后的整个页面代码以及效果图都放在评论区的下一楼,请移步观看,谢谢!

    2023-07-28 11:54

易者

易者 (作者)

整个页面代码如下:

<template>  
    <view class="mymain">  
        <template v-for="(item,index) in cart">  
            <view class="myrow">  
                <text class="cartnum">{{item.num}}</text>  
                <uni-number-box v-model="item.num" :min="0" color="#000"  @blur="" @focus="" @change="cartnum($event,item,index)"/>  
            </view>  
        </template>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                cart:[  
                    {num:1},{num:1},{num:1},{num:1},{num:1},{num:1},{num:1}  
                ]  
            }  
        },  
        methods: {  
            cartnum(num,item,index){  
                let tmpcart = this.cart;  
                if(num>0){  
                    tmpcart[index].num = num;  
                    this.cart = tmpcart;  
                }else{  
                    if(this.cart.length>1){  
                        tmpcart.splice(index, 1);  
                        this.cart = tmpcart;  
                    }else{  
                        let that = this;  
                        uni.showModal({  
                            title: '提示',  
                            content: '即将清空您的购物车!',  
                            showCancel: false,  
                            success: function (res) {  
                                if (res.confirm) {  
                                    that.cart=[];  
                                    uni.navigateBack({  
                                        delta: 0,  
                                    });  
                                }  
                            }  
                        });  
                    }  
                }  
            }  
        }  
    }  
</script>  

<style>  
    .mymain{  
        width: 100%;  
        display: flex;  
        flex-direction: column;  
        align-items: center;  
        justify-content: center;  
        position: fixed;  
        top: 20%;  
    }  
    .myrow{  
        display: flex;  
        flex-direction: row;  
        align-items: center;  
        justify-content: center;  
    }  
    .cartnum{  
        margin: 0rpx 26rpx;  
    }  
</style>

页面初始效果图如下:


从最上面一行依次往下一行点击,加号一般没问题,就是当原数字为1的时候,点击减号会有问题。

  • 爱豆豆

    很明显 你没有绑定key

    2023-07-28 15:51

要回复问题请先登录注册