1.this.$vue和直接赋值的区别
在开发的工程中经常需要替换值或者需要修改属性值,由于在form表单的时候用到了v-model属性,所以当值修改后按道理来说会同步到表单,并且看日志也确实进行了修改,但是前端经常性没有进行修改这是为什么呢?
如用到elmentUi的select组件
<el-form-item prop="leastPointMethod">
<el-select
v-model="temp.leastPointMethod"
placeholder="请选择"
@change="leastPointMethodEvent"
style="width:200px"
>
<el-option
v-for="item in dedPointMethodOption"
:key="item.key"
:label="item.val"
:value="item.key"
></el-option>
发现在前端无法进行更新,于是找到了$set方法
在官网上找到一段这样的解释
向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue
无法探测普通的新增属性 (比如 this.myObject.newProperty = ‘hi’)
于是在@change的时候
this.$set(this.temp,"leastPointMethod", val);
发现可以进行赋值,但是选了多次选择后就前台还是无法进行选择了,百思不得其解释,
于是尝试着用原装的select,发现是可以选择到的。猜测可能是elmentUI在多层级调动的时候出现的问题
最后解决方案
找到了 this.$forceupdate强制刷新 发现可以
leastPointMethodEvent(val) {
this.$forceUpdate();
},
官方解释为:
迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。