深入理解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 相关文章推荐
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
Dec 14 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
Aug 20 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 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
yii框架配置默认controller和action示例
2014/04/30 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP速成大法
2015/01/30 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python实现LRU热点缓存及原理
2019/10/29 Python
Python3开发环境搭建详细教程
2020/06/18 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
应届生程序员求职信
2013/11/05 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
置业顾问岗位职责
2014/03/02 职场文书
党课培训心得体会
2014/09/02 职场文书
个人查摆剖析材料
2014/10/16 职场文书
汽车转让协议书范本
2014/12/07 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
深入理解python多线程编程
2021/04/18 Python
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang