深入理解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 相关文章推荐
node.js中的fs.exists方法使用说明
Dec 17 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
Aug 04 Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
详解VueJs中的V-bind指令
May 03 Javascript
微信小程序实现手指触摸画板
Jul 09 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
Jul 19 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
Mar 04 Javascript
js实现删除json中指定的元素
Sep 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
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python中的多重继承实例讲解
2014/09/28 Python
python正则表达式match和search用法实例
2015/03/26 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
如何基于Python按行合并两个txt
2020/11/03 Python
高三自我鉴定范文
2013/10/19 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
武夷山导游词
2015/02/03 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python