深入理解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 相关文章推荐
学习ExtJS(一) 之基础前提
Oct 07 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
Jan 13 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
js使用for循环查询数组中是否存在某个值
Aug 12 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
Angular.JS通过指令操作DOM的方法
May 10 Javascript
jQuery中each方法的使用详解
Mar 18 jQuery
Js面试算法详解
Apr 08 Javascript
在小程序开发中使用npm的方法
Oct 17 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
vue element-ui读取pdf文件的方法
Nov 26 Javascript
微信小程序后端实现授权登录
Feb 24 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
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
smarty简单分页的实现方法
2014/10/27 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php 可变函数使用小结
2018/06/12 PHP
JS 统计时间
2021/03/09 Javascript
Z-Blog中用到的js代码
2007/03/15 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python实现控制COM口的示例
2019/07/03 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
html5 input属性使用示例
2013/06/28 HTML / CSS
品质标语大全
2014/06/21 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
催款律师函范文
2015/05/27 职场文书
社区宣传标语口号
2015/12/26 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
element多个表单校验的实现
2021/05/27 Javascript
php去除deprecated的实例方法
2021/11/17 PHP