关于VUE中递归组件的学习产生的相关BUG和解决

本文探讨了在Vue中使用递归组件时遇到的问题,即无法单独控制递归组件的个体。作者尝试将数组转换为对象数组并通过绑定index解决此问题,通过事件传递实现了对特定组件的控制。在与一位前端大佬交流后,作者理解到这种做法的不足,并对其代码进行了优化,减少了组件间的耦合。最后,文章总结了代码的逻辑流程。
摘要由CSDN通过智能技术生成

BUG的产生

vue的递归组件,因为一开始学习VUE只会组件的相关数据绑定来源于父组件,最后出现了需要达到控制递归组件中的任意一个,但是无法确定是哪个,导致一控就是全部的问题。

昨天早上想到是否可以递归的数组变成对象数组去达到呢??最后通过绑定数据获取index值,父组件中的data的list变成对象数组,子组件相关绑定数据变为item.属性, 通过触发事件执行函数中$emit反馈index值和自己子组件的data的对象给父组件, 触发监听函数执行,操作list,最后重新渲染页面,达到单个控制递归组件的其中一个。以下就是我自己写的修改BUG的代码。

自己写的修改BUG的代码

<div id="Box">
    <div v-for="(item,index) of list" :key="item.number">
        <myinput :value="item.input_text" :disabled="item.btn_disabled"></myinput>
        <outbutton @change_disabled="btn_click" :number="index"></outbutton>
    </div>
</div>

<script>
    var myinput = {
   
        template:`<input type="text">`
    };
    
    var outbutton = {
   
        props:["number"],
        data:function(){
   
            return{
   
                btn_value : "修改",
                obj:{
   
                    number: 0,
                    input_text: "第一个",
                    btn_disabled: true,
                    btn_style: {
   
                        backgroundColor: "black",
                        color: "white"
                    }
                }
            }
        },
        template: `<button @click="btn_click" ref="name">{
    {btn_value}}</button>`,
        methods: {
   
            btn_click:function () {
   
                this.$refs.name.className = this.obj.btn_disabled ? "unlock" : "";
                this.obj.btn_disabled = !this.obj.btn_disabled;
                this.obj.number = this.number;
                this.btn_value = this.obj.btn_disabled ? "修改" : "确认";
                console.log(this.obj.btn_disabled);
                console.log(this.obj.btn_content = "修改");
                this.$emit("change_disabled",[this.obj, this.number])
            }
        }
    };

    var vm = new Vue({
   
        el:"#Box",
        data:{
   
            list: [{
   
                number: 0,
                input_text: "第一个",
                btn_disabled: true,
                btn_style: {
   
                    backgroundColor: "white",
                    color: "black"
                }},{
   
                number: 1,
                input_text: "第二个",
                btn_disabled: true,
                btn_style: {
   
                    backgroundColor: "white",
                    color: "black"
                }}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值