深入理解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 相关文章推荐
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
Listloading.js移动端上拉下拉刷新组件
Aug 04 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
May 03 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 Javascript
详解JavaScript按概率随机生成事件
Aug 02 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
Feb 08 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
AngularJS实现的自定义过滤器简单示例
Feb 02 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 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 Smarty 字符比较代码
2011/02/27 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
Python判断telnet通不通的实例
2019/01/26 Python
python实现学员管理系统
2019/02/26 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
积极贯彻学习两会精神总结
2014/03/17 职场文书
兴趣小组活动总结
2014/05/05 职场文书
2015年中个人总结范文
2015/03/10 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书