【Vue】vue element 掉用子组件,子组件dialog关闭后,会提示如下错误
问题描述:
父页面点击按钮后,正常显示子组件里的dialog,
子组件dialog关闭后,会提示如下错误(好像不影响正常使用):
vue.esm.js?efeb:628 [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: "visible"
父页面代码如下
<el-button type="primary" size="mini" @click="Visible=true">新增</el-button><addinfo ref="info" v-if="Visible" :visible.sync="Visible"></addinfo>
子组件代码如下:
<template><el-dialog title="新增" :visible.sync="visible" @close="closeDialog">
123
</el-dialog>
</template>
<script>
export default {
props:['visible'],
data() {
return {
}
},
methods:{
//关闭Dialog
closeDialog(){
this.$emit('update:visible', false);
}
},
};
</script>
提示错误图片:
回答
警告已经说明白了,至于怎么解决很简单,addinfo 的显示和不显示不应该直接使用el-dialog的visible,因为el-dialog的visible会被自己内部修改,本身已经破坏了规则,此时你再来一层,继续破坏规则,相当于el-dialog的内部直接修改了自己父级,自己的父级又修改了它的父级~~~~ 乱了~没规矩了
// 去掉sync 修饰符,断开内部修改自身(双向绑定),通过close事件触发上级addinfo的回调函数来改变addinfo visible,el-dialog通过 prop 传递过来的 visible 控制显示隐藏// 修改如下:
<el-button type="primary" size="mini" @click="Visible=true">新增</el-button>
<addinfo ref="info" v-if="Visible" :visible="Visible" @close="Visible=false"></addinfo>
//子组件
<template>
<el-dialog title="新增" :visible="visible" @close="$emit('close')">
123
</el-dialog>
</template>
<script>
export default {
props:['visible'],
data() {
return {
}
}
};
</script>
也可以把el-dialog :visible.sync 改成 :visible
你可以在子页面传方法出去,改父页面调用方法,进行修改。
比如:
子页面
closeDialog(){ this.$emit('closeModal', false);
}
父页面
<addinfo ref="info" v-if="Visible" :visible.sync="Visible" @closeModal="closeModal"></addinfo>...
methods: {
closeModal(val){
this.Visible = val
}
}
避免直接改变属性,因为每当父组件重新呈现时,该值都将被覆盖。相反,应该使用基于props的数据或计算属性。
以上是 【Vue】vue element 掉用子组件,子组件dialog关闭后,会提示如下错误 的全部内容, 来源链接: utcz.com/a/81948.html