Vue.set的使用

摘要:
重新分配的值<headlang=“en”>pv for=“iteminitems”;key=“item.id”>{{item.message}}<buttonclass=“btn”@click=“btn2Click()”>动态分配<buttonclass=“btn”@click=“btn3Click()”>为数据添加属性&lt/button>

原文链接: https://www.jianshu.com/p/e6e8c45e7fd6       更多链接:  https://blog.csdn.net/smartab/article/details/103799929

问题起因:     vue中对象和数组无法双向绑定的情况以及解决方案

这里我定义了一个列表数据,我将通过三个不同的按钮来控制列表数据。
调用方法:Vue.set( target, key, value )
target:要更改的数据源(可以是对象或者数组)
key:要更改的具体数据
value :重新赋的值

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="app2">
    <p v-for="item in items" :key="item.id">
        {{item.message}}
    </p>
    <button class="btn" @click="btn2Click()">动态赋值</button><br/>    
    <button class="btn" @click="btn3Click()">为data新增属性</button>
</div>
<script src="../../dist/vue.min.js"></script>
<script>
var vm2=new Vue({
    el:"#app2",
    data:{
        items:[
            {message:"Test one",id:"1"},
            {message:"Test two",id:"2"},
            {message:"Test three",id:"3"}
        ]
    },
    methods:{
        btn2Click:function(){
            Vue.set(this.items,0,{message:"Change Test",id:'10'})
        },
        btn3Click:function(){
            var itemLen=this.items.length;
            Vue.set(this.items,itemLen,{message:"Test add attr",id:itemLen});
        }
    }
});
</script>
</body>
</html>

此时页面是这样:

Vue.set的使用第1张

我点击第一个按钮后运行methods中的btn2Clcick方法,此时我要将Test one更改为Change Test
Vue.set的使用第2张

 运行后的结果:此时列表中第一列的Test one已经变成了Change Test

Vue.set的使用第3张

 这里得警惕一种情况:
当写惯了JS之后,有可能我会想改数组中某个下标的中的数据我直接this.items[XX]就改了,如:

btn2Click:function(){
  this.items[0]={message:"Change Test",id:'10'}
}

我们来看看结果:

Vue.set的使用第4张

这种情况,是Vue文档中明确指出的注意事项,由于 JavaScript 的限制,Vue 不能检测出数据的改变,所以当我们需要动态改变数据的时候,Vue.set()完全可以满足我们的需求。

仔细看的同学会问了,这不是还有一个按钮吗,有什么用?

我们还是直接看:

Vue.set的使用第5张

 这是初始的列表数据,数据里面有三个对象
点击之后:

Vue.set的使用第6张

 这里可以看出,Vue.set()不光能修改数据,还能添加数据,弥补了Vue数组变异方法的不足

免责声明:文章转载自《Vue.set的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇向MySQL 中存储二进制数据文件爬虫:滑动验证解决方法及python实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

plsql导出导入 表结构、表数据、存储过程等

导出:首先点击   TOOLS,选择  EXPORT TABLES  选中你需要导出的表,   勾选  “Create tables” 是因为在导入的数据库中没有此表 如果勾选"Drop tables" 而没有勾选 “Create tables” ,而数据库中没有此表,会报表和视图不存在 Output file 为导出的路径   如果你想导的表  数据记录...

数据库增量日志监听canal

概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司...

App功能测试的注意点

  好几个月没有写博客记录学习心得了,这次回老家深夜闲来无事写一篇记录下这段时间的面试心得,这次面试过程很多面试官都问APP的有关测试,下面我就自己的认识和工作中的经验来谈谈自己对APP测试的认识: 1.push消息推送测试 检查push消息是否按照指定的业务规则发送。 检查不接收推送消息时,用户不会再接收到push消息。 如果用户设置了免打扰的时...

Android Studio同时监听多个Button实现activity跳转

   MainActivity.java: package com.example.test; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx....

SQL模糊查询语句和Escape转义字符

通配符 描述 示例 % 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 _(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean...

实现Excel文件的上传和解析

前言 本文思维导图 一、需求描述 实现一个页面上传excel的功能,并对excel中的内容做解析,最后存储在数据库中。 二、代码实现 需求实现思路: 先对上传的文件做校验和解析,这里我们通过ExcelUtil工具类来实现; 解析得到的数据进行批量插入。 2.1 接口定义 @PostMapping(path = "/batchMaintainBa...