在vue中对数组值变化的监听与重新响应渲染操作


Posted in Javascript onJuly 17, 2020

在我们项目开发过程中,实例中的数据类型可以是对象、数组等。在对象中,某个属性值发生更改时,我们可以通过对象的深度监听,以达到重新渲染页面的需求。或者查阅这篇文章

例如:

<script>
 export default {
 data(){
 return {
 objVal: {
  name: 'obj',
  type: 'obj'
 }
 }
 },
 watch:{
 objVal:{
 handler(val,oldval){
 
 },
 deep: true,
 }
 },
 methods:{
 changeObj(){
 this.objVal.name = 'newobj';
 }
 }
 }
</script>

但是,在使用同一种方式进行数组值更改监听时,这种做法是无效的。

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 watch: {
 arrList: {
 handler(val, oldval) {
 
 },
 deep: true
 }
 },
 methods: {
 changeArr() {
 // 无效
 this.arrList[0] = 10;
 }
 }
};
</script>

上述用以监听数组值变化的方法是无效的,vue是不会响应数据变化而重新去渲染页面。在vue中仅需要通过修改赋值语句的方式,即可让vue响应数组数据的变化。具体操作如下:

使用方法:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

具体使用案例:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.arrList.splice(0, 1, 10);
 }
 }
};
</script>

或:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.$set(this.arrList, 0, 10);
 }
 }
};
</script>

以上两种方式,均可达到监听数组值变化的效果。

补充知识:vue数组操作不触发前端重新渲染

暂时使用给数组先赋值 [ ] ,然后重新赋值的方式解决。

此外,能够监听的数组变异方法

https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC%82%E6%96%B9%E6%B3%95

还有就是set

Javascript 相关文章推荐
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
Aug 03 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
javascript字符串函数汇总
Dec 06 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
JS组件Bootstrap Table使用实例分享
May 30 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
vue2.0父子组件间通信的实现方法
Apr 19 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
Aug 25 Javascript
JS常见构造模式实例对比分析
Aug 27 Javascript
代码分析vue中如何配置less
Sep 28 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
vue中三级导航的菜单权限控制
Mar 31 Vue.js
Vue项目中数据的深度监听或对象属性的监听实例
Jul 17 #Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 #Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 #Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 #Javascript
简单了解常用的JavaScript 库
Jul 16 #Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 #jQuery
浅谈js中的attributes和Attribute的用法与区别
Jul 16 #Javascript
You might like
php Ajax乱码
2008/04/09 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
JS简单实现移动端日历功能示例
2016/12/28 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
回调函数的意义以及python实现实例
2017/06/20 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python爬虫用mongodb的理由
2020/07/28 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
港湾网络笔试题
2014/04/19 面试题
店长岗位职责
2013/11/21 职场文书
美容师的职业规划书
2013/12/27 职场文书
2014植树节活动总结
2014/03/11 职场文书
村长贪污检举信
2014/04/04 职场文书
学雷锋的心得体会
2014/09/04 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
化工厂员工工作总结
2015/10/15 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript