vue计算属性无法监听到数组内部变化的解决方案


Posted in Javascript onNovember 06, 2019

vue的计算属性

计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data。

首先看一下计算属性的基本写法(摘自官网)

var vm = new Vue({
 el: '#demo',
 data: {
 firstName: 'Foo',
 lastName: 'Bar'
 },
 computed: {
 fullName: function () {
  return this.firstName + ' ' + this.lastName
 }
 }
})

这样我们在模版里这样引入computed属性就可以了,他的效果个data一样

<div id="demo">{{ fullName }}</div>

这样我们修改firstName或者lastName,fullName都会同步更新

这里我们主要不是讲这个,而是讲如果把 firstName和lastName放在一个数组里

比如这样[firstName ,lastName]

如果这时候修改数组中的一项会不会有相同的效果呢?

修改一下代码

var vm = new Vue({
 el: '#demo',
 data: {
  nameArray:['Foo' ,'Bar']
 },
 computed: {
 fullName: function () {
  return this.nameArray[0] + ' ' + this.nameArray[1]
 }
 }
})
methods: {
 change () {
  this.nameArray[0] = '123'
 }

触发change方法可见fullName并没有变化。原因可能是vue没有监听到数组 nameArray的长度变化。

此时我们可以采用splice让数组的长度有个变化,这时候vue就可以监听到了

this.nameArray.splice(0, 1, '123')

或者使用vue的$set方法

this.$set(this.nameArray, 0, '123')

还有一点要注意,就是如果这个计算属性没有使用过,也就是说页面中没有引用,也没有其他变量使用他,同样不会触发计算属性。至少,来个console打印一下也行

以上这篇vue计算属性无法监听到数组内部变化的解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery中LigerUi的弹出编辑框(实现方法)
Jul 09 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
Javascript基础教程之关键字和保留字汇总
Jan 18 Javascript
javascript字符串与数组转换汇总
May 26 Javascript
字符串反转_JavaScript
Apr 28 Javascript
小白谈谈对JS原型链的理解
May 03 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
canvas实现图像放大镜
Feb 06 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
Jul 12 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
Jan 22 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 #Javascript
vuex state中的数组变化监听实例
Nov 06 #Javascript
element的el-table中记录滚动条位置的示例代码
Nov 06 #Javascript
webpack是如何实现模块化加载的方法
Nov 06 #Javascript
node读写Excel操作实例分析
Nov 06 #Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 06 #Javascript
electron 安装,调试,打包的具体使用
Nov 06 #Javascript
You might like
用PHP调用Oracle存储过程
2006/10/09 PHP
php session和cookie使用说明
2010/04/07 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
python 解压pkl文件的方法
2018/10/25 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
苹果中国官方网站:Apple中国
2016/07/22 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
出租房屋协议书
2014/09/14 职场文书
公民代理授权委托书
2014/09/24 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
幼儿园毕业致辞
2015/07/29 职场文书