vue2 响应式双向绑定,在对象或数组新增属性页面无响应解决方法

发布于:2022-12-05 ⋅ 阅读:(319) ⋅ 点赞:(0)

问题描述

        vue2 中可以将数据与视图进行绑定,修改 data 对象的属性值将引起对应视图的改变。Vue2的数据视图绑定是通过JS特性这一语法实现,其使用中存在数据属性丢失的这 一 bug,主要针对 对象或数组 属性丢失。

        使用 antv a-select (下拉框)组件,使用 v-mode 绑定对象 的值,但是 对象之前是没有赋值的,是一个 空对象 ,这就导致了 页面视图不刷新 ,但是 属性值有变化 ,这可以说是 vue2 的一个缺陷。

// 空对象

queryParam: {

      },

 解决方法

方法一 (设置初始值)

给 绑定的对象 赋初始值 null 或者 ' ' 

  queryParam: {
        approveStatus : null ,    
      },

        如果是普通 输入框 input ,这样的方法没什么问题,但是 我的页面使用 a-select 下拉框,默认有提示消息( placeholder),如果 赋初始值 为空 ,下拉框会填充空白内容 ,覆盖之前的提示消息 ,这样的页面 会比较不美观且不友好


 <a-select  v-model="queryParam.approveStatus" placeholder="审核状态" :allowClear="true">
        <a-select-option v-for="status of videoApproveStatus" :key="status.id">
                 {{  status.text }}
        </a-select-option>
 </a-select>
                    
  <a-select  v-model="queryParam.videotypeid" placeholder="视频类型" :allowClear="true">
         <a-select-option v-for="d in videotype" :key="d.myid">
                 {{ d.name }}
          </a-select-option>
   </a-select>          

虽然这种方法可以解决绑定对象属性丢失问题,但是如果给 每个属性设置 初始值 为 null,那么所有的下拉框都是空白 , 可以看到 下拉框 赋初始值 为 null ,页面的效果非常不友好 ,没有提示信息 ,所有这种方法不推荐


 方法二 (创建一个新的对象,替换原对象)

这种方法可以用于需要添加多个新属性,再把原对象与新属性合并到新对象中
Object.assign(目标对象,原对象, 新属性)

this.queryParam = Object.assign({}, this.queryParam, obj)

我这里是 利用 a-select 下拉框 自带的 下拉框 改变方法 ,@change ,该方法有两个参数 value 和 option ,value 代表你改变的值 ,option (我也不太明白 ,反正里面东西很多),然后 我利用 这个 @change 方法 和  Object.assign(目标对象,原对象, 新属性), 解决了状态丢失问题 ,大家可以 参考下面的代码 ,根据自己的实际情况进行调整 (每个人的情况都不一样)

 <a-select @change="handleChange"  v-model="queryParam.approveStatus" placeholder="审核状态" :allowClear="true">
       <a-select-option v-for="status of videoApproveStatus" :key="status.id">
               {{  status.text }}
       </a-select-option>
 </a-select>

 handleChange(value,option) { 
      if(option) {
        //  解决双向绑定状态丢失
          this.queryParam = Object.assign({}, this.queryParam, option.context.queryParam)
      } else {
        return 
      } 
    },

文章如有错误,恳请大家提出问题,本人不胜感激 。 不懂的地方可以评论,我都会 一 一 回复

文章对大家有帮助的话,希望大家能动手点赞鼓励,大家未来一起努力     长路漫漫,道阻且长