深入理解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 相关文章推荐
javascript 基础篇2 数据类型,语句,函数
Mar 14 Javascript
jquery实现的导航固定效果
Apr 28 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
微信JSAPI支付操作需要注意的细节
Jan 10 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
微信小程序富文本渲染引擎的详解
Sep 30 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 Javascript
js实现简单掷骰子效果
Oct 24 Javascript
Vue路由 重定向和别名的区别说明
Sep 09 Javascript
js实现验证码干扰(动态)
Feb 23 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php服务器的系统详解
2019/10/12 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python管理Windows服务小脚本
2018/03/12 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python多线程同步实例教程
2019/08/11 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
三八节主持词
2014/03/17 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP