深入理解vue中的$set


Posted in Javascript onJune 01, 2017

在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去;

当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。如下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>vue $set</title>
<script src="https://static.3water.com/assets/vue/1.0.11/vue.min.js"></script>
</head>
<body>
<div id="app">
 姓名:{{ name }}<br>
 年龄:{{age}}<br>
 性别:{{sex}}<br>
 说明:{{info.content}}
</div>
<!-- JavaScript 代码需要放在尾部(指定的HTML元素之后) -->
<script>
var data = {
 name: "三水点靠木",
 age: '3',
 info: {
  content: 'my name is test'
 }
} 
var key = 'content';
var vm = new Vue({
 el:'#app',
 data: data,
 ready: function(){
  //Vue.set(data,'sex', '男')
  //this.$set('info.'+key, 'what is this?');
 }
});
data.sex = '男';
</script>
</body>
</html>

运行结果:

姓名:三水点靠木
年龄:3
性别:
说明:my name is test

为什么会这样呢?当去查对应文档时,你会发现响应系统 ,把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter,如上示例,将data在控制台打印出来会发现:

深入理解vue中的$set

在age及name都有get和set方法,但是在sex里面并没有这两个方法,因此,设置了sex值后vue并不会自动更新视图;

解决方法:

<script>
var data = {
 name: "三水点靠木",
 age: '3',
 info: {
  content: 'my name is test'
 }
} 
var key = 'content';
new Vue({
 el:'#app',
 data: data,
 ready: function(){
  Vue.set(data,'sex', '男');
  this.$set('info.'+key, 'what is this?');
 }
});
</script>

1、通过Vue.set方法设置data属性,如上:

Vue.set(data,'sex', '男')

2、您还可以使用 vm.$set实例方法,这也是全局 Vue.set方法的别名:

var key = 'content'; //这种主要用于当对象中某个属性值动态生成时处理方式
this.$set('info.'+key, 'what is this?');
//或
this.$set('info.content', 'what is this?');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE关闭时判断及AJAX注销案例学习
Feb 18 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
Apr 06 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
Aug 11 Javascript
js实现的早期滑动门菜单效果代码
Aug 27 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
详解angular中的作用域及继承
May 31 #Javascript
Node学习记录之cluster模块
May 31 #Javascript
Express框架之connect-flash详解
May 31 #Javascript
node.js中express-session配置项详解
May 31 #Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 #Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 #Javascript
JS简单实现自定义右键菜单实例
May 31 #Javascript
You might like
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
深入理解js promise chain
2016/05/05 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
详解django自定义中间件处理
2018/11/21 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
centos7之Python3.74安装教程
2019/08/15 Python
python接入支付宝的实例操作
2020/07/20 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
主要的Ajax框架都有什么
2013/11/14 面试题
机电专业大学生求职信
2013/10/04 职场文书
cf收人广告词大全
2014/03/14 职场文书
授权委托书范本
2014/04/03 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
保护环境的标语
2014/06/09 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
酒店员工手册范本
2015/05/14 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python