Vue 父子组件checkbox-group值同步

6 篇文章 0 订阅

子组件中有一个checkbox-group需要与父组件中的变量同步,关键代码如下:

  1. 父组件:父组件中引入子组件,并设置好供子组件调用的方法
import scene from "@/components/form/scene.vue";    
    export default {
        data() {
            return {
                editMode: true,
                form: {
                    scenes: ["aaa", "bbb"],                    
                },
        },
        //注册组件
        components: {
            scene
        },
        methods: {
            setScenes(val) {
                this.form.scenes = val.scenes;                
                console.log(this.form.scenes)
            },
        }
  }
<scene :scenes=form.scenes :editAble=editMode @setScenes="setScenes($event)"></scene>
  1. 子组件:子组件中关键是computed中的sscenes变量的set和get方法。
    get方法好理解,当使用sscenes时读取其值,返回的始终是父组件中的对应值。JSON.parse(JSON.stringify(this.scenes))能保证读取到合法的值。
    set方法中,当子组件中sscenes值改变,即子组件中checkbox-group被点击时,触发set方法,但此时并不改变子组件中sscenes的值,而是通知父组件更新父组件中scenes的值。而使用子组件中sscenes的值时,触发get方法,得到的是更新后的父组件中的scenes的值。
<template>
    <div class="eventDate">
        <el-card class="box-card" @blur="blur">
            <el-form-item label="发生地点" icon="el-icon-warning"
                :rules='[{ required: true, message: "请选择发生地点", trigger: "blur" } ] '>
                <el-checkbox-group v-model="sscenes">
                    <el-checkbox label="aaa"></el-checkbox><br>
                    <el-checkbox label="bbb"></el-checkbox><br>
                    <el-checkbox label="ccc"></el-checkbox>                    
                </el-checkbox-group>
            </el-form-item>
        </el-card>
    </div>
</template>
<script>
    //发生地点
    export default {
        name: 'scenes',
        props: ['scenes', 'editMode'],
        computed: {
            sscenes: {
                get() {
                    return JSON.parse(JSON.stringify(this.scenes))  //只取其值,两者是两个不同的对象
                },
                set(val) {
                    console.log(val)
                    this.$emit('setScenes', {             //因其他业务需要,这里上传一个对象
                        scenes: val,
                        otherScence: this.otherScence
                    });
                }
            }
        },
    }
</script>
  1. 参考链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值