v-model的类型
一般来说,组件的 v-model 都是简单类型,不会有对象类型的。
只是我这几天不是在封装表单控件嘛,既然都封装了,那么表单控件的v-model显然需要是一个对象了,否则数据怎么传递呢?
但是出了点小问题。
一般的做法是,外面设置一个 v-model ,然后组件内部用 emit('update:modelValue', xxx) 来返回v-model的值。
对于简单类型肯定是没用问题的,但是如果是对象呢?
先试了一下reactive,发现“收不到”返回值,换成ref就可以了。
这个也好解释,因为reactive不能直接赋值,但是似乎又哪里不对的样子。
设置断点跟踪了一下 emit('update:modelValue', xxx),然后……绕晕了,水平有限看不懂。
如果对别人说,我封装的这个表单控件,只能用ref的,是不是有点怪异。
那么直接修改属性值呢?
这个其实在组件里面是 可以做到的,尤其是对于对象类型,更是有很多种方法。
最简单的就是,做一个js文件,里面写个函数,把props作为参数传递进来,然后就可以“为所欲为”了。
当然也不是直接用属性,而是这样
// context.emit('update:modelValue', formModel) // 地址变了
Object.assign(props.modelValue, formModel) // 不改变地址
就是把原来应该用 emit 的地方,换成了 Object.assign的方式。
话说,反正都是返回数据给 v-model,那么为啥不能直接一点呢?

040表单meta的工具.png
传值传来传去的有点晕。虽然用了vuex,关键是 v-model 到底要如何设置才更合理呢?