vue对象添加属性(key:value)、显示和删除属性方式

目录
  • 对象添加属性(key:value)、显示和删除属性
    • 效果图
    • 添加属性
    • 删除属性
  • 不能检测到对象属性的添加或删除问题
    • 有三种解决方案

对象添加属性(key:value)、显示和删除属性

效果图

<FormItem label="输入项填充内容 :" prop="value" :rules="name1" style="margin-top: 20px">
            <Button type="success" @click="addKey">新增</Button>
            <table class="table">
              <tr>
                <th>key值</th>
                <th>value值</th>
                <th>操作</th>
              </tr>
              <tr v-for="(item,key) in keyValues" v-if="keyValueShow">
              <td>{{key}}</td>
              <td>{{keyValues[key]}}</td>
              <td><Button type="error" @click="keyDelete(key)">删除</Button></td>
            </tr>
              <tr>
                <td>
                  <FormItem>
                    <Input class="application-ipt" type="text" placeholder="输入内容" v-model="keyValue.key"></Input>
                  </FormItem>
                </td>
                <td colspan="2">
                  <FormItem>
                    <Input class="application-ipt" type="text" placeholder="输入内容" v-model="keyValue.value"></Input>
                  </FormItem>
                </td>
              </tr>
            </table>
          </FormItem>

添加属性

 addKey(){
            if(this.keyValue.key==''){
              this.$Message.error('请输入key值');
            }else if(this.keyValue.value==''){
              this.$Message.error('请输入value值');
            }else{
              if(JSON.stringify(this.keyValues) !== '{}'){
                for(var k in this.keyValues){
                  if(k == this.keyValue.key) {
                    this.$Message.error('key值不能重复');
                    this.keyValue.key=''
                    return
                  }else{
                    this.keyValues[this.keyValue.key]=this.keyValue.value
                    this.keyValue.key=''
                    this.keyValue.value=''
                    //可以强制重新渲染页面
                    this.$forceUpdate();
                  }
                }
              }else{
                this.keyValues[this.keyValue.key]=this.keyValue.value
                this.keyValue.key=''
                this.keyValue.value=''
                this.$forceUpdate();
              }
            }
        },

删除属性

 keyDelete(key){
          var keyValues = this.keyValues
          for (var k in keyValues) {
            console.log(k,key)
            if(k==key){
              delete keyValues[k]

            }
            this.keyValues=keyValues
            this.$forceUpdate();
          }
        },

不能检测到对象属性的添加或删除问题

官网介绍到:受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。

由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

上面的a是响应式的,所以a的改变后会自动渲染页面;

但是b是在vm实例创建之后添加的属性,所以他不是响应式的,当我们改变b的值的时候,通过DevTool看到的数据并不会改变,除非我们在DevTool中刷新数据,而且页面也不会刷新。

有三种解决方案

  • 方案一:利用Vue.set(object,key,value)
Vue.set(vm.obj,"sex","man")
  • 方案二:利用this.$set(this.object,key,value)
this.$set(this.obj,"sex","man")
  • 方案三:利用Object.assign({},this.obj)
this.obj.sex = "man";this.obj = Object.assign({},this.obj)
  • 或者下面方式
this.obj = Object.assign({ },this.obj,{"sex","man"})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • VUE 实现动态给对象增加属性,并触发视图更新操作示例

    本文实例讲述了VUE 实现动态给对象增加属性,并触发视图更新操作.分享给大家供大家参考,具体如下: 在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新. Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property).然而它可以使用

  • 对VUE中的对象添加属性

    背景:在通过接口获取数据集对象后,根据业务场景需要在数据集对象上增加额外的属性 data中定义的数据集对象mindData格式示例如下 mindData: [ {label:'清醒',value:'清醒'}, {label:'朦胧',value:'朦胧'}, {label:'嗜睡',value:'嗜睡'}, {label:'昏睡',value:'昏睡'}, {label:'谵妄',value:'谵妄'}, {label:'模糊',value:'模糊'}] 1) 通过post调用接口获取minDa

  • vue给对象动态添加属性和值的实例

    一.背景 介绍:在vue中请求接口中,一个请求方法可能对应后台两个请求接口,所以请求参数就会有所不同.需要我们先设置共同的参数,然后根据条件动态添加参数属性. 二.案例 let that = this; let params = { "type":that.addQueTable.type, "discussTitle":that.addQueTable.discussTitle, }; // 区分普通题库还是模考题库 let addQuestionApi = ''

  • vue对象添加属性(key:value)、显示和删除属性方式

    目录 对象添加属性(key:value).显示和删除属性 效果图 添加属性 删除属性 不能检测到对象属性的添加或删除问题 有三种解决方案 对象添加属性(key:value).显示和删除属性 效果图 <FormItem label="输入项填充内容 :" prop="value" :rules="name1" style="margin-top: 20px"> <Button type="succes

  • vue 对象添加或删除成员时无法实时更新的解决方法

    前阵子将项目搬上Vue的时候偶遇一个突发问题 当对象添加或删除成员时页面无法实时更新渲染,但是数组是正常的 目测是ob没有监听到对象的成员有变化 查看一些大家的求助回答是说ob监听的是数组length的变动 对象默认没有length 新增成员时不会自增length 所以监听不到对象的变化 最近大脑过于疲惫 懒得看文档了... 不多废话 解决方式直接上代码 在实例内部可以用$set和$delete this.$set(this.age,'age',18); this.$delete(this.ag

  • vue如何添加数组页面及时显示

    目录 如何添加数组页面及时显示 给对象中添加数组 如何添加数组页面及时显示 最近在做vue相关的项目,在过程中,遇到了很多问题,有的解决了,有的还没解决,其中一个比较好的问题是,一个评论回复功能,点击回复,可以把内容获取到并且加入数组中,但页面不会及时显示. 经过很多百度摸索,终于解决了. 让我们一起来看看吧. //newwrite是定义的一个数组 //push进去用户名和输入的内容,changeitems //changeitems是我监听的输入框的内容  //<textarea id="

  • vue给对象添加属性没有响应式的问题及解决

    目录 vue给对象添加属性没有响应式 给已创建的vue添加响应式属性 怎么才能添加响应式的属性呢? 总结 vue给对象添加属性没有响应式 vue2的响应式原理使用的是对象代理去实现的,对象代理中有一个get和set方法,当我们访问对象的时候就会触发get方法,当我们对对象中的值进行修改时会触发set方法. 但是当我们给对象添加一个新的属性时对象代理是检测不到的,所以就会出现直接给对象添加属性响应式不生效的问题. 在vue中可以使用this.$set(对象名,'属性名',属性值)的方法去给对象添加

  • JavaScript中prototype为对象添加属性的误区介绍

    先上需要用到的全部代码片段(截取) 复制代码 代码如下: MenuControl.prototype.boxDisplay = false;//是否显示图层选择菜单 MenuControl.prototype.controlUI; MenuControl.prototype.show = function(){ if(pointControl.boxDisplay){ pointControl.hide(); } menuBoxDiv.style.display = ""; this.

  • vue响应式Object代理对象的修改和删除属性

    目录 正文 set delete 正文 上一篇文章我们学习了如何代理对象的读取,下面我们学习如何代理对象的修改和删除属性. set set就是修改代理的属性,按照我们之前写的reactive,它大概是这样的 const ITERATE_KEY=symbol() const p = new Proxy(obj,{ set(target,key,newVal,receiver){ const res = Reflect.set(target,key,newVal,receiver) trigger(

  • JS动态给对象添加属性和值的实现方法

    如下所示: var obj={}; for(var i=0;i<10;i++){ eval("obj.p"+i+"="+i); } 以上就是小编为大家带来的JS动态给对象添加属性和值的实现方法全部内容了,希望大家多多支持我们~

  • Javascript中prototype属性实现给内置对象添加新的方法

    本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>prototype

  • 在Vue组件上动态添加和删除属性方法

    如下所示: 在组件上添加属性 this.$set(this.data,"obj",value'); 删除属性this.$delete(this.data,"obj",value'); 以上这篇在Vue组件上动态添加和删除属性方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Vue.js动态添加.删除选题的实例代码 详解Vue 动态添加模板的几种方法

随机推荐