晒网
晒网
  • 发布:2024-08-26 02:03
  • 更新:2024-08-26 19:57
  • 阅读:161

watch在循环创建组件中多次数发

分类:uni-app x

比如父组件 A 有一个for循环 创建了N个子组件,且子组件中有watch监听
这样创建完成后 当点击某个按钮时 子组件的watch会触发N次 N为几就触发几次
这个怎么解决呀

比如A中创建了10个子组件 每个子组件显示不同的图片 当点击这个图片时则给图片点击的位置加上一个小红旗的标记 当显示小红旗的时候 要弹出一个提示 用watch监听了点击的x坐标 发现创建了多少个子组件就会执行多少次 这个怎么隔离开呢

2024-08-26 02:03 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

这是你传参的问题吧,都指向了同一个数据,你这样试试

<template>  
    <view>  
        <view style="width: 100%; height: 100%;flex-direction: column;">  
            <pf-childs :clickx="clickx[index]" @click="textwatch(index)" v-for="item,index in textwatchlist" :key="item"></pf-childs>  
        </view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                title: 'Hello',  
                clickx: [1,2,3,4,5],  
                textwatchlist: [  
                    {  
                        names: '1'  
                    },  
                    {  
                        names: '2'  
                    },  
                    {  
                        names: '3'  
                    },  
                    {  
                        names: '4'  
                    },  
                    {  
                        names: '5'  
                    }  
                ],  
            }  
        },  
        onLoad() {  

        },  
        methods: {  
            textwatch(index:number) {  
                this.clickx[index]++  
            }  
        }  
    }  
</script>  

<style>  
    .logo {  
        height: 100px;  
        width: 100px;  
        margin: 100px auto 25px auto;  
    }  

    .title {  
        font-size: 18px;  
        color: #8f8f94;  
        text-align: center;  
    }  
</style>
  • 晒网 (作者)

    次哦 是呀 我应该传for循环里面item的某个属性的 结果图省事 绑了个其它变量 阿门

    2024-08-26 21:36

DCloud_UNI_yuhe

DCloud_UNI_yuhe

你好,详细提供一下你的代码吗?看一下你是怎么用的

7***@qq.com

7***@qq.com

不用watch直接@click添加在组件上也是可以的吧

  • 晒网 (作者)

    实现方法有很多 只是发现了这个问题 如果说你自定义一个slider呢 如果是视频轮播列表呢 发现问题不得解决一下呀

    2024-08-26 17:59

  • 7***@qq.com

    回复 1***@qq.com: 不懂你解决问题的方式为什么是钻牛角尖

    2024-08-27 10:09

晒网

晒网 (作者) - 只晒网不打渔

前端组件 通用组件代码

<template>
<view style="height: 50px;width: 366px;margin-bottom: 11px;background-color: blueviolet;">
{{clickx}}
</view>
</template>
<script>
export default {
data() {
return {

        }  
    },  
    props: {  
        clickx: {  
            type: Number,  
            default: 0  
        }  
    },  
    watch: {  
        clickx(newval:number,oldval:number) {  
            if (newval > oldval) {  
                console.log('------', newval   '->'   oldval)  
            }  
        }  
    }  
}  

</script>
<style>
</style>

父组件
<view style="width: 100%; height: 100%;flex-direction: column;">
<pf-childs :clickx="clickx" @click="textwatch" v-for="item in textwatchlist" :key="item"></pf-childs>
</view>

点击事件
textwatch() {
this.clickx
},

list数据

            textwatchlist: [  
                {  
                    names: '1'  
                },  
                {  
                    names: '2'  
                },  
                {  
                    names: '3'  
                },  
                {  
                    names: '4'  
                },  
                {  
                    names: '5'  
                }  
            ],  

点击后输出的结果

19:11:00.950 ------ 3->2 at uni_modules/pf-childs/components/pf-childs/pf-childs.vue:22
19:11:00.951 ------ 3->2 at uni_modules/pf-childs/components/pf-childs/pf-childs.vue:22
19:11:00.952 ------ 3->2 at uni_modules/pf-childs/components/pf-childs/pf-childs.vue:22
19:11:00.953 ------ 3->2 at uni_modules/pf-childs/components/pf-childs/pf-childs.vue:22
19:11:00.954 ------ 3->2 at uni_modules/pf-childs/components/pf-childs/pf-childs.vue:22

  • DCloud_UNI_yuhe

    你详细给一下你的父组件是如何用的

    2024-08-26 19:30

晒网

晒网 (作者) - 只晒网不打渔

@DCloud_UNI_yuhe 看上面 得制粘贴就能看到了

晒网

晒网 (作者) - 只晒网不打渔

附件下载直接运行 然后点击紫色的部分就能看到效果 @DCloud_UNI_yuhe

要回复问题请先登录注册