el-dialog作为子组件使用,点击自带关闭按钮报错

el-dialog作为子组件使用时,点击dialog自带关闭按钮会报错:

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “dialogVisible”

  • 原因:

vue的单向数据流原理,不能在子组件中直接修改父组件传过来的值,子组件和父组件的关闭事件产生冲突

  • 解决方案:

设置:before-close

before-close为关闭弹窗前的回调函数,在操作改变子组件关闭事件之前先调用父组件的关闭事件,就不会再报错了

子组件:

<template>	
	<el-dialog
	    title="请选择要新建的商机类型"
	    :visible.sync="dialogVisible"
	    :before-close="toggleDialog"
	    :close-on-click-modal="false" />
</template>

<script type="text/javascript">
export default {
  name: 'createBusiness',
  props: {
    dialogVisible: Boolean
  },
  data() {
    return {}
  },
  methods: {
    toggleDialog() {
      this.$emit('toggleDialog')
    }
  }
}
</script>

父组件:

<template>
	<create-business
	    :dialog-visible="dialogVisible"
	    @createClick="createHandle"
	    @toggleDialog="closeDialog" />
</template>

<script type="text/javascript">
import CreateBusiness from '@/components/CreateBusiness'
export default {
  name: 'CRMListHead',
  components: {
    CreateBusiness
  },
  data() {
    return {
    	dialogVisible: false
    }
  },
  methods: {
    // dialog弹窗关闭调用,防止报错
	closeDialog() {
	  this.dialogVisible = false
	}
  }
}
</script>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值