vue 基于v-model 双向绑定原理 二次封装el-radio-group组件

封装组件`

<template>
   <div class="box">
        <el-radio-group v-model="radio" @change="update">
            <el-radio v-for="item in radioList"
                    :key="item.id" :label="item.value">
                {{item.value}}
            </el-radio>
        </el-radio-group>
   </div>
</template>

<script>
export default {
    name:'radioGroup',
    data(){
        return{
            radio:'',
        }
    },
    props:{
        radioList:{
            type:Array,
            default:()=>{
                return []
            }
        },
        value:'',// 默认绑定的v-model的值
    },
    watch:{
        value(newVal,oldVal){
            console.log("更新后:"+newVal+","+"更新前:"+oldVal);
            if (newVal) {
                this.radio = newVal
            }
        }
    },
    methods:{
        update(){
            //input是默认双向绑定事件,select控件也可以用input给父组件传递数据
            this.$emit('input',this.radio)
        }
    }

}
</script>

<style>

</style

父组件使用

<template>
  <div class="fill_in_box">
    <el-dialog title="填报详情" :visible.sync="formVisible" append-to-body width="70%">
       <div class="form_detial">
           <div class="end_time">填报截止时间:2022-09-23 12:23</div>
            <el-scrollbar style="height:100%">
                <div class="content">
                    <!-- 表单内容 -->
                    <div class="form_box">
                        <div class="borderBox">
                            <radioGroup v-model="test" :radioList="arr" @input="change"></radioGroup>
                        </div>
                    </div>
                </div>
            </el-scrollbar>
       </div>
    </el-dialog>
  </div>
</template>

<script>
import radioGroup from '@/views/InputComponents/radioGroup.vue'
export default {
    data(){
        return{
           formVisible: true,
           test:'',
           arr:[{
            value: '选项1',
            label: '黄金糕'
            }, {
            value: '选项2',
            label: '双皮奶'
            }, {
            value: '选项3',
            label: '蚵仔煎'
            },
           ]
        }
    },
    components:{
        radioGroup
    },
    methods:{
        show(){
            this.formVisible = true
        },
        change(){
            console.log("11111111",this.test);
        }
    }
}
</script>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值