深入理解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中defer的作用
Dec 11 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
Nov 17 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
Bootstrap面板学习使用
Feb 09 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
JavaScript实现横版菜单栏
Mar 17 Javascript
一起来了解一下JavaScript的预编译(小结)
Mar 01 Javascript
详细聊聊vue中组件的props属性
Nov 02 Vue.js
详解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中ob_start函数的使用说明
2013/11/11 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php中的ini配置原理详解
2014/10/14 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
python字典序问题实例
2014/09/26 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python numpy 点数组去重的实例
2018/04/18 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
python使用多进程的实例详解
2018/09/19 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python如何存储数据到json文件
2020/03/09 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
2014年国庆节演讲稿
2014/09/02 职场文书
关于运动会的广播稿
2014/09/22 职场文书
费用申请报告范文
2015/05/15 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript