zoukankan      html  css  js  c++  java
  • form表单数据回显双向绑定失效的原因

    最近看vue源码分析类的文章,断断续续的看着,时不时发现一些以前没注意的一些点。

    正好前段时间写项目时突然发现有时候用element-UI的表单时,在一个弹框里,数据回显,最开始表单绑定的对象是空对象,然后我直接给表单的数据指定了哪些字段赋值,然后在修改表单内容时,发现怎么输入不进去呢,像是双向绑定失效了。类型下面这种写法

     1 export default {
     2     data () {
     3         return {
     4             form: {}
     5         }
     6     },
     7       methods: {
     8             editPop () {
     9               this.form.selectType = 0
    10           }
    11      }            

    当时没多想,直接给最开始的空对象里添加了那几个要显示的字段,然后再赋值,就可以正常输入了,即可以实现双向绑定了。

    当时不明白什么原因,还以为是element的bug,今天看vue源码解析的文章时,作者的一句话让我想明白了出现上述问题的原因:对于使用 Object.defineProperty 实现响应式的对象,当我们去给这个对象添加一个新的属性的时候,是不能够触发它的 setter 的。

    一开始我的表单存储的对象是空对象,然后我指定给对象里的属性的时候,这些属性是之前没有的,所以就不能触发setter。所以才有了$set这个方法,通过$set可以新增一个响应式的属性,就可以实现双向绑定了。

    以前没有注意到这个问题,现在明白了,总算是知其所以然了

  • 相关阅读:
    纪中培训 8月8日 day3 考试
    【置顶】博客搬迁
    图论②——??? (poj 3662)
    图论①——??? (2750: [HAOI2012]Road)
    树形dp①
    区间dp②
    区间dp①
    线性dp②
    字符串算法①——kmp
    图论——最小生成树①
  • 原文地址:https://www.cnblogs.com/liuqin-always/p/13750695.html
Copyright © 2011-2022 走看看