警告:Set operation on key "visible" failed: target is readonly.

782 阅读2分钟

前言

本想代码内部封装一个小小弹窗,所有的弹窗配置项放在一起,内容直接使用插槽的形式,这样底部的“确定”“取消”按钮就不用每次都去写loading,弹窗的配置项也能统一管理,但是错误的时机使用了v-model,记录一下。

错误现象

错误代码

使用的是V3+vxe组件库(UI库不重要,需要什么看api就行),错误代码上图: 左侧是父页面,右侧字页面

690f89d25b627e96f697506b79c067f.png 父页面双向绑定visinle,同时,子页面弹窗的v-model也绑定到了props.visible, 子页面关闭的时候更新一下visible。平平无奇的一个双向绑定。

运行没任何问题。

错误现象

就是有个警告:

3290d67e87db954bd4e65fe53383269.png 提示我绑定了一个只读属性。

解决方案

提示我绑定的属性不对、那就改,改个字段好了。

8a53ef9610c3a01954ec942809968ea.png 换个形式、接着绑,运行关闭的时候直接公开一个方法出去,父级关。

运行起来也没问题。

吃饭的时候还在琢磨这个事情,这个东西本身不复杂、让我这么复杂的干,肯定还有出错的地方,重新捋一下思路,发现是自己陷入了一个误区:父级跟子级都想用v-model图省事,本身没任何问题,问题点就再props内的是只读属性,不能双向绑定,而且我的思路也出来了,就是父级负责整体的显示与隐藏,子级内不用管是否显示隐藏,全权交给父级,再扒拉一下api,发现能不用双向绑定,用传值也能控制dialog也能显示与隐藏。那就直接改,不使用双向绑定了。

目前最优解

78a95f4f16e9f81b3f24f3e4f2f6b93.png