Vue2.0子组件修改父组件传来的值时报错

场景:

子组件是一个弹窗,父组件传值控制弹窗的显示。当在子组件关闭弹窗时,会改变父组件传来的值,这时控制台报错。

代码:

<div class="user-status"
   @click="loginDialogVisible = true">
    <i class="el-icon-user"></i>
    <span>快速登录/注册</span>
</div>
// UserLogin为弹窗组件
<UserLogin :loginVisible.sync="loginDialogVisible"></UserLogin>
// UserLogin组件内容
<el-dialog :visible.sync="loginVisible"
            custom-class="loginDialog">
</el-dialog>                 
props: {
    loginVisible: {
        type: Boolean,
        defaule: false
    }
},  

关闭弹窗后控制台报错:
在这里插入图片描述

分析:

报错内容:避免直接改变属性,因为每当父组件重新渲染时,该值都将被覆盖。
结论:不推荐子组件直接修改父组件中的参数,避免这个参数多个子组件引用,无法找到造成数据不正常的原因。

更正:

子组件中再定义一个参数,使用
$emit(update: prop, “newPropVulue”) => $emit(update: 属性名, “新的属性值”)
来更新父组件的参数。

代码:

// UserLogin组件内容
<el-dialog :visible.sync="dataCloseVisible"
            custom-class="loginDialog">
</el-dialog>     

props: {
    loginVisible: {
        type: Boolean,
        defaule: false
    }
},

watch: {
    dataCloseVisible: function () {
        this.$emit('update:loginVisible', this.dataCloseVisible)
    },
    loginVisible: {
        handler: function (newValue) {
            this.dataCloseVisible = newValue;
        },
        immediate: true
    },
},
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值