深入理解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 相关文章推荐
jquery 新手学习常见问题解决方法
Apr 18 Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 Javascript
JavaScript的代码编写格式规范指南
Dec 07 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
jquery html5 视频播放控制代码
Nov 06 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
May 27 Javascript
node.js域名解析实现方法详解
Nov 05 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 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获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
javascript 函数使用说明
2010/04/07 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Fabric 应用案例
2016/08/28 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
python中字典增加和删除使用方法
2020/09/30 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
校园公益广告语
2014/03/13 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
建设工程授权委托书
2014/09/22 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python