求教:组件作为列表子项渲染,组件删除下一个组件会继承删除组件样式
发布于 6 年前 作者 vhu 979 次浏览 来自 问答

具体情况是这样的:

    一个收货地址列表,列表里的每项是一个组件(就是列表渲染的是组件),组件里面的删除操作是滑屏后显示删除按钮后,再点击删除才能删除(就是删除按钮一开始在可视范围外,具体看交互看图片)。

    现在,我对中间的地址项进行删除操作(这时候这个子项添加了css的transform: translate(-120rpx, 0)来显示删除按钮)。这时候点击删除功能是正常,但下一个组件竟然继承了这个子项的css偏移量(就是下一个组件的删除按钮竟然直接显示而不需要滑动了)。

删除实现方式:

    组件点击删除后,通过that.triggerEvent(“delAddress”, {id: id});交给父级操作ListData数据去删除这个组件的数据(删除功能是正常的,但css会被继承)。

已测试操作:

    对wx:key进行了增加和删除测试,但问题还是存在。

具体图片:

具体的组件的代码:

// component/footer/footer.js

var app = getApp();

// var state = { //怕用户一直双击或者ajax速度慢等问题,防止双击,目前代码已经注释,但还是有这个问题

//     sw: {

//         delAjaxIng: false

//     }

// };

Component({

    /**

     * 组件的属性列表

     */

    properties: {

        itemData: {

            type: Object,

            value: {

                id: 10,

                consignee: “李四”,

                region_id: 0,

                is_default: 0,

                phone: “150****123”,

                street: “广东省广州市天河区天河路xxx”

            }

        }

    },

    /**

     * 组件的初始数据

     */

    data: {

        delW: 0,  //控制滑动多少实现偏移,因为rpx转设备实际像素,所以需要转换

        startX: 0, //touchstart的坐标,根据可视范围记录

        moveX: 0, //touchmove的坐标,根据可视范围记录

        endX: 0, //touchend时的坐标,根据可视范围记录

        transformCss: “transform: translate(0rpx, 0)”, //视图的根据这个样式进行渲染的

        transitionCss: “”,

        isTouchMove: false, //开发时发现,直接点击页面会跳过touchmove事件

    },

    ready: function () {

        this.setData({

            delW: Math.ceil(winInfo.windowWidth / 750 * 120 * 1.8),

        });

    },

    /**

     * 组件的方法列表

     */

    methods: {

        detached: function() {

            console.log(“ddddddddddd”)

        },

        delAddress: function() {

            var that = this;

            // if (state.sw.delAjaxIng) {

            //     return false;

            // }

            var id = that.data.itemData.id;

            var url = ‘/shipping_address/delete_shipping_address’;

            //state.sw.delAjaxIng = true;

            //ajax进行了封装,方便公用。默认Post方式提交

            app.Lyj.fn.ajax({

                url: url,

                data: {

                    id: id

                }

            }).then(function (rec) {

                //state.sw.delAjaxIng = false;

                var fullData = rec || {};

                var respData = fullData.data || {};

                var data = respData.data || {};

                console.log(data)

                if (respData.code == 200) {

                    that.triggerEvent(“delAddress”, {id: id});

                } else {

                    wx.showToast({

                        icon: “none”,

                        title: respData.message,

                    });

                }

            }, function () {

                //state.sw.delAjaxIng = false;

            });

        },

        touchStart: function (e) {

            this.setData({

                startX: e.touches[0].clientX,

                transitionCss: “” //需要清空transition

            });

            //console.log(“start”, e.touches[0].clientX);

        },

        touchMove: function (e) {

            var endX = this.data.endX;

            var moveX = e.touches[0].clientX;

            this.setData({

                isTouchMove: true,

                moveX: moveX,

                transformCss: “transform: translate(” + (moveX - this.data.startX + endX) + “rpx, 0);”

            });

        },

        touchEnd: function (e) {

            //直接点击会不触发touchmove

            if (!this.data.isTouchMove) {

                return false;

            }

            var x = this.data.moveX - this.data.startX;

            var endX = this.data.endX;

            var absX = Math.abs(x);

            var delW = this.data.delW;

            //console.log(“xxxxx:” + x, “startX:” + this.data.startX, “moveX:” + this.data.moveX, “endX:” + endX, “delW:” + delW)

            this.setData({

                startX: 0,

                transitionCss: “transition: all .4s;”

            });

            if (endX < 0) {

                if (x < 0) {

                    x = endX;

                    this.setData({

                        transformCss: “transform: translate(” + x + “rpx, 0);”,

                        endX: x

                    });

                }

                else {

                    if (x >= delW) {

                        x = 0;

                        this.setData({

                            transformCss: “transform: translate(” + x + “rpx, 0);”,

                            endX: x

                        });

                    }

                    else {

                        x = -120;

                        this.setData({

                            transformCss: “transform: translate(” + x + “rpx, 0);”,

                            endX: x

                        });

                    }

                }

            }

            else {

                if (x >= 0) {

                    x = 0;

                    this.setData({

                        transformCss: “transform: translate(” + x + “rpx, 0);”,

                        endX: x

                    });

                }

                else {

                    if (absX > delW) {

                        x = -120;

                        this.setData({

                            transformCss: “transform: translate(” + x + “rpx, 0);”,

                            endX: x

                        });

                    }

                    else {

                        x = 0;

                        this.setData({

                            transformCss: “transform: translate(” + x + “rpx, 0);”,

                            endX: x

                        });

                    }

                }

            }

        }

    }

})

希望遇到过此问题或者知道是什么原因触发此问题的各位指教下。。。提前谢谢了~~

2 回复

数据层每个数据多加个字段isShow吧,通过wx:if去判断渲染,删除只是改变isSHow,这样就不会继承样式了。

别沉。。。。

回到顶部