vue +iview +modal 弹框关闭后再次打开不显示的问题
在做项目中再次遇到问题1.问题环境:vue+iview2.问题描述:将Modal对话框封装成一个子组件,在父组件引用,当对话框打开然后关闭,再次打开时对话框无法正常打开;!!!3.解决:搜索了好多例子,有的说props属性接收的值在子组件是无法改变的,因为v-model是双向绑定当对话框状态发生该变,props的值也会改变,这样会导致报错,但是实测过后发现并无报错。排查问题后发现原来是在父组件给子
在做项目中再次遇到问题
1.问题环境:vue+iview
2.问题描述:将Modal对话框封装成一个子组件,在父组件引用,当对话框打开然后关闭,再次打开时对话框无法正常打开;
!!!3.解决:
搜索了好多例子,有的说props属性接收的值在子组件是无法改变的,因为v-model是双向绑定当对话框状态发生该变,props的值也会改变,这样会导致报错,但是实测过后发现并无报错。
排查问题后发现原来是在父组件给子组件传值是赋值发生了问题
父组件:
这个是在render函数里面写的,h,和params,用过的应该知道
on: {
click: () => {
this.dataList = params.row;
this.dataList["type"] = "wm";
this.dataList["modal1"] = true;
// console.warn(this.dataList);
},
},
data(){
return{
dataList: {
modal1: false,
type: "",
id: "",
phoneNo: "",
password: "",
role: "",
wtype: "",
typeName: "",
sysName: "",
moduleCode: "",
buttonName: "",
iconUrl: "",
linkUrl: "",
orderNo: "",
serviceUrl: "",
fileUrl: "",
extendsJson: "",
showFlag: "",
clientId: "",
clientCode: "",
moduleType: "",
},
}}
这是data里面的dataList,也是将要传给子组件的值,这样的赋值方式是不对的,因为会导致dataList.modal1缺失,虽然后面给dataList添加了一个key:modal1,val:true,但是当对话框关闭后并未触发props,导致对话框状态一直为True,冲突之后肯定就打不开了,最神奇的是控制台console竟然没有报错
后台使用watch监听才发现,对话框关闭后v-model根本没有触发,错误的缘由就在于赋值,所以想到了用对象合并,因为dataList 和params.row都是对象,只需要合并去重,即可,
on: {
click: () => {
Object.assign(this.dataList, params.row);
this.dataList.modal1 = true;
},
},
然后再给modal1赋值即可,问题解决!大佬勿喷
更多推荐
所有评论(0)