vue中data数据无法同步到视图的问题?

我预实现的效果是:
根据pushData数据自动创建表单
并根据每个表单的不同绑定不同的方法,比如手机表单可以做到验证号码,姓名表单可以验证姓名规则等等
目前遇到一个问题,就是在手机表单中通过输入触发iserr属性,无法同步到视图显示

请问这是什么原因导致的呢?

我的的代码如下:

<template>
  <div id="app">
    <ul>
      <li
        v-for="(item, index) in pushData"
        :key="index"
      >
        <!-- 如果是输入框 start -->
        <input
          v-if="item.type=='text'"
          type="text"
          :placeholder = "'请输入' + item.name"
          @input="item.fun"
          :class="item.iserr?'error':''" // 问题:数据无法同步到此处
        />
        <!-- 如果是输入框 end -->
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data () {
    return {
      pushArray: [],
      pushData: { // 表单中涉及的数据
        user: {
          name: '姓名',
          type: 'text'
        },
        phone: {
          name: '手机',
          type: 'text'
        },
        company: {
          name: '公司',
          type: 'text'
        }
      }
    }
  },
  created () { // 在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图
    let that = this
    for (let item in this.pushData) { // 数据筛选
      let dataType = that.pushData[item]
      dataType.iserr = false
      switch (dataType.type) {
        case 'text':
          // typeText(dataType, dataName)
          dataType.fun = function (e) {
            dataType.val = e.target.value            
            // 问题:通过输入出发iserr改变,并控制input的class显示,但是无法同步到视图
            dataType.iserr = true
            // that.$set(that.pushData[item], 'iserr', true)
          }
          break
      }
    }
  }
}
</script>
阅读 2.2k
3 个回答

初始化iserr为false的时候使用 this.$set(this.pushData[item], 'iserr', false)
触发的时候有也要this.$set(this.pushData[item], 'iserr', true)

  created() {
    let that = this;
    for (let item in this.pushData) {
      this.$set(that.pushData[item], "iserr", false);
      switch (that.pushData[item].type) {
        case "text":
          that.pushData[item].fun = function(e) {
            that.pushData[item].val = e.target.value;
            that.$set(that.pushData[item], "iserr", true);
          };
          break;
      }
    }
  }

对象中新追加属性的时候要使用$set或者object.assign方法,不然视图层更新不了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题