首页 > 其他分享 >vue2中$set用法详细讲解

vue2中$set用法详细讲解

时间:2023-06-27 10:13:59浏览次数:31  
标签:set 绑定 vm Vue vue2 讲解 双向 userProfile

1、为什么要用set?

在vue中,并不是任何时候数据都是双向绑定的。
在官方文档中,有这样一段话,如下:

 从文档得知,当数据没有被双向绑定的时候,我们就需要使用set了

2、set用法

解决数据没有被双向绑定我们可以使用 vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名。

this.$set(原数组, 索引值, 需要赋的值)

length的问题还需要用splice方法。

vm.items.splice(newLength)

3、什么时候使用set?

set为解决双向绑定失效而生,我们只需要关注什么时候双向绑定失效就可以了。

vue2中只要值的地址没有改变,vue是检测不到数据变化的。

共有下面三种情况:

  1. 当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如:vm.items.length = newLength
  3. 由于 JavaScript 的限制,Vue不能检测对象属性的添加或删除

此处针对第三点做一些说明:

var vm = new Vue({ data: { a: 1 } })

// `vm.a` 现在是响应式的

vm.b = 2 // `vm.b` 不是响应式的

从上面的代码我们可以知道vm.b不是响应式的,简单的来说,如果对象中原来没有这个key,新增的key是无法双向绑定的。

当然这里我们同样可以用set去解决这个问题:

vm.$set(vm.userProfile, 'age', 27)

如果我们添加的属性很多条,可能就需要写一个循环来多次set。当然你也可能使用Object.assign,这里有一些需要注意的地方。

如果你想添加新的响应式属性,下面这样写是不行的。

Object.assign(vm.userProfile, { age: 27, favoriteColor: 'Vue Green' })

下面这样才是正确的。

vm.userProfile = Object.assign({}, vm.userProfile, { age: 27, favoriteColor: 'Vue Green' })

标签:set,绑定,vm,Vue,vue2,讲解,双向,userProfile
From: https://www.cnblogs.com/Dasate/p/17507906.html

相关文章

  • C# mysql MySqlDataAdapter fill(dataset) 字符串格式错误
    MySqlDataAdapter fill(dataset)时候报错字符串格式错误。排查两天发现是mysql数据表内字段设计错误,datetime格式的字段长度设置错误,应设置为0,原先设置为6.代码如下try{using(MySqlConnectionconnection=newMySqlConnection(connectio......
  • Vue2.x 基本认识四:路由
    路由认识概念路由(route)就是一组(key -value)对应关系。多个路由由一个路由器(router)管理。key为路径,value可能是function或component。function是后端路由,用于请求服务器获取数据。component是前端路由,用于展示页面内容。但浏览器的路径改变时,对应的组件就会显示。作......
  • 【Node】node 报错:tagOffsetsMap[tag] ??= [];...SyntaxError: Unexpected token ,‘??=
    安装的node版本不支持空值赋值运算符(??=)更换合适的node版本就行更多支持请在node.green上查看各种语法支持的版本参考文章NodeJS中的空合并赋值运算符(??=)......
  • 【cs50 2022】lab1 && problem set1
    |lab1|#include<cs50.h>#include<stdio.h>intmain(void){//TODO:Promptforstartsizeintstart_size;do{start_size=get_int("Startsize:");}while(start_size<9);//TODO:Promptforend......
  • 配置文件 proxy_set_header -发往后端服务器的请求头---- nginx日志设置级别调试技巧
    http{includemime.types;default_typeapplication/octet-stream;sendfileon;#tcp_nopushon;#keepalive_timeout0;keepalive_timeout65;server_tokensoff;log_formatmain'$remote_addr-$remote_user[$time_local]......
  • 关于reset.css的一些思考与探究
    项目多了,大家多会有自己积累的一些reset.css的经历或者自己改进的代码,其实初衷还是很简单的,达到复用,重置浏览器的一些默认样式,实现跨浏览器兼容。 1、最早关注的还是YUI的ResetCSS,  在线的压缩版本地址:http://yui.yahooapis.com/3.4.1/build/cssreset/cssreset-min.css 直接上......
  • IDEA : Cannot Save Setting ** must not contain source root **. The root alrea
    今天突然碰到这个问题,具体原因是parant目录不能放src的code。解决方法图片右侧的父project的SoureceFolders,是不是把子模块module或者其他模块加载进来(会标红),删除即可......
  • 【mysql】parseTime=true 参数说明以及如何在 GORM 中使用它避免 Scan error on colum
    什么是parseTime=true参数parseTime=true是一个MySQL数据库连接参数,它告诉MySQL驱动程序将日期时间类型的值解析为time.Time类型。在MySQL中,日期时间类型的值可以表示为字符串,例如2022-07-0113:30:00。默认情况下,MySQL驱动程序将这些值作为[]uint8类型返回,这可能......
  • 代理理论讲解
    代理:破解放IP这种反爬机制代理的概念:-代理服务器。代理的作用:-突破自身IP访问的限制。-可以隐藏自身真是IP代理相关的网站:-快代理-西祠代理-www.goubanjia.com......
  • "Setuperr"是一个Windows系统安装过程中生成的错误日志文件
    "Setuperr"是一个Windows系统安装过程中生成的错误日志文件。它记录了安装过程中发生的错误和问题,以便帮助诊断和解决安装失败或出现问题的情况。通常,"Setuperr"日志文件位于以下目录中:C:$WINDOWS.~BT\Sources\Panther\setuperr.log要查看"Setuperr"日志文件,请按照以下步骤进行......