深入理解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 相关文章推荐
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
May 19 Javascript
js获取事件源及触发该事件的对象
Oct 24 Javascript
javascript自定义startWith()和endWith()的两种方法
Nov 11 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
vue: WebStorm设置快速编译运行的方法
Oct 18 Javascript
一个因@click.stop引发的bug的解决
Jan 08 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
小程序如何使用分包加载的实现方法
May 22 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 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
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
ExtJS 入门
2010/10/29 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Python装饰器基础详解
2016/03/09 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
详解用python实现简单的遗传算法
2018/01/02 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
初学者学习Python好还是Java好
2020/05/26 Python
Python过滤序列元素的方法
2020/07/31 Python
Python截图并保存的具体实例
2021/01/14 Python
有原因的手表:Flex Watches
2019/03/23 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
文秘专业个人求职信
2013/12/22 职场文书
初中校园广播稿
2014/02/02 职场文书
职业女性的职业规划
2014/03/04 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
淮海战役观后感
2015/06/11 职场文书
追悼会家属答谢词
2015/09/29 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers