vue数组套对象,在动态加入属性:属性值, 导致数据不更新

一 、案例效果

[{a: 1,b:2},{a: 1,b:2}, toggle:true]导致视图不更新且数据没有响应式。这种格式是数组套对象的,之后由于不想在遍历一层数据变成[{a: 1,b:2,toggle:true},{a: 1,b:2,oggle:true} ] ,就直接加在对象后面了【虽然这样写法不对,但是,有另外一种可以达到想到的效果】

二、实际效果

数组会变成在最后一个对象中加入需要的属性,即 [{a: 1,b:2},{ a: 1,b:2,toggle:true}]且具有响应式

三、复盘

如果你的数据结构是一个数组,其中最后一个元素是一个对象,包含 toggle 属性,而你希望修改这个 toggle 属性并让视图响应更新,但发现视图没有更新,这通常是因为 Vue 不能检测到数组索引和对象属性的变化。
在 Vue 2.x 中,Vue 不能自动检测以下变动的数组:
当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength
对于对象,Vue 不能检测到对象属性的添加或删除。
解决方法:
对于数组,使用 Vue.set 或 vm. s e t 方法来设置项值,或使用数组的 s p l i c e 方法。对于对象,如果你在创建实例之后添加新的属性到实例上,你应该使用 V u e . s e t 或 v m . set 方法来设置项值,或使用数组的 splice 方法。 对于对象,如果你在创建实例之后添加新的属性到实例上,你应该使用 Vue.set 或 vm. set方法来设置项值,或使用数组的splice方法。对于对象,如果你在创建实例之后添加新的属性到实例上,你应该使用Vue.setvm.set。
针对你的情况,如果你想修改数组中最后一个对象的 toggle 属性并确保视图更新,你应该使用 Vue.set 或 vm.$set。假设你的数组存储在 data 的 myArray 属性中,你可以这样做:

// 假设你想切换最后一个元素的 toggle 属性
this.$set(this.myArray[this.myArray.length - 1], 'toggle', !this.myArray[this.myArray.length - 1].toggle);

这样,Vue 就能够检测到 toggle 属性的变化,并且更新视图。

四、完整示例

<template><div><div v-for="(item, index) in myArray" :key="index"><!-- 假设你想展示每个对象的 toggle 状态 --><p v-if="typeof item.toggle !== 'undefined'">Toggle: {{ item.toggle }}</p></div><button @click="toggleLastItem">切换最后一项的 Toggle</button></div>
</template><script>
export default {data() {return {myArray: [{}, {}, { toggle: true }],};},methods: {toggleLastItem() {let lastIndex = this.myArray.length - 1;this.$set(this.myArray[lastIndex], 'toggle', !this.myArray[lastIndex].toggle);},},
};
</script>

在这个示例中,点击按钮会切换数组最后一个对象的 toggle 属性值,并且视图会相应地更新

五、应用场景

超过两条展示 展开收起

针对特定的数据结构,如 [{},{}, {toggle: true}],如果数组长度超过两条数据时,需要展示“展开/收起”按钮,并根据 toggle 属性的值动态展示全部数据或只展示前两条数据,可以通过以下步骤实现:

  1. 计算属性或者封装方法:创建一个计算属性来决定基于 toggle 状态展示的数据。
  2. 方法:实现一个方法来切换 toggle 状态。
  3. 模板:在模板中使用计算属性来展示数据,并添加一个按钮来控制展开/收起。
    示例代码如下:
<template><div><!-- 根据 需要循环的数组 展示数据 --><div v-for="(item, index) in toggleArrLength(需要循环的数组)" :key="index"><!-- 展示每个项目的内容 -->{{ item.content }}</div><!-- 当数组长度超过2时,展示展开/收起按钮 --><button v-if="items.length > 2" @click="toggleHandle(需要循环的数组)">{{ 需要循环的数组[需要循环的数组.length - 1].toggle ? '收起' : '展开' }}</button></div>
</template>private toggleArrLength(arrData: any) {let lastIndex = arrData.length - 1;return arrData[lastIndex].toggle ? arrData : arrData.slice(0, 2);}// 切换 toggle 状态private toggleHandle(data) {console.log('toggleMsg--item', data);let lastIndex = data.length - 1;this.$set(data[lastIndex],'toggle',!data[lastIndex].toggle,);}

样例

<template><div><!-- 根据 displayedItems 展示数据 --><div v-for="(item, index) in displayedItems" :key="index"><!-- 展示每个项目的内容 -->{{ item.content }}</div><!-- 当数组长度超过2时,展示展开/收起按钮 --><button v-if="items.length > 2" @click="toggleItems">{{ items[items.length - 1].toggle ? '收起' : '展开' }}</button></div>
</template><script>
export default {data() {return {// 假设的数据结构,最后一个对象包含 toggle 属性items: [{ content: 'Item 1' }, { content: 'Item 2' }, { toggle: true }],};},computed: {// 根据 toggle 状态决定展示的数据displayedItems() {// 如果 toggle 为 true 或数组长度不超过2,展示全部项目if (this.items.length <= 2 || this.items[this.items.length - 1].toggle) {return this.items.slice(0, -1); // 不包括最后一个 toggle 对象} else {// 否则,只展示前两个项目return this.items.slice(0, 2);}},},methods: {// 切换 toggle 状态toggleItems() {let toggleItem = this.items[this.items.length - 1];toggleItem.toggle = !toggleItem.toggle;},},
};
</script>

结论: 在这个示例中:
items 数组包含了要展示的数据,最后一个对象是控制展开/收起的 toggle 状态。
displayedItems 计算属性根据 toggle 的值决定展示全部数据还是只展示前两条数据。
toggleItems 方法用于切换 toggle 状态。
模板中使用 v-for 根据 displayedItems 展示数据,并提供一个按钮来控制展开/收起,按钮的文本也根据 toggle 状态动态变化。
注意:这个示例假设除了最后一个对象用于控制展开/收起外,其他对象都是要展示的数据。如果你的数据结构有所不同,请相应调整代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM端侧部署系列 | 陈天奇MLC-LLM重磅升级:基于机器学习编译的通用LLM部署引擎

引言 简介 MLCEngine的聊天功能 OpenAI风格API 云端REST API Python API iOS SDK Android SDK WebLLM SDK 小结 结构化生成 支持各种平台 优化引擎性能 总结 引言 流星透疏水&#xff0c;走月逆行云。 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&am…

如何获取泛型参数【Java】

对于一个基本的类 public class BaseDao<T>{T findOne() {return T;} }它的子类 public class StudentDao extends BaseDao<StudentDao.Student>{public static class Student{}}如何获得当前类对应的泛型参数呢&#xff1f; 方法一 JDK public static void ma…

关于onlyoffice回调函数的问题

参考文档1&#xff1a;https://api.onlyoffice.com/zh/editors/callback 在官方文档中描述的十&#xff0c;文档存储服务的回调函数&#xff0c;必须要返回 {"error": 0}表示成功&#xff0c;否则将提示错误信息。 但是经过实测&#xff0c;我们只需要正常的返回2…

力扣2874.有序三元组中的最大值 II

力扣2874.有序三元组中的最大值 II 遍历j –> 找j左边最大数 和右边最大数 class Solution {public:long long maximumTripletValue(vector<int>& nums) {int n nums.size();vector<int> suf_max(n1,0);//右边最大数for(int in-1;i>1;i--){suf_max[i…

Mysql - 数据库备份和恢复

当涉及到数据库管理时&#xff0c;数据库备份和恢复是非常关键的操作。备份可以保护数据库中的重要数据免受意外删除、数据库故障或者恶意攻击的影响。同时&#xff0c;恢复操作可以帮助我们在发生意外情况时快速恢复数据库到之前的状态。在这篇文章中&#xff0c;我们将深入探…

每日一题——Python实现PAT乙级1090 危险品装箱(举一反三+思想解读+逐步优化)4千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 题目链接&#xff1a;https://pintia.cn/problem-sets/994805260223102976/exam/problems/typ…

STL工程问题

文章目录 1. vector迭代器失效问题1.1. 情况1&#xff1a;扩容导致迭代器失效1.2. 情况2&#xff1a;删除导致迭代器失效1.3. 情况3&#xff1a;尾删导致迭代器失效 2. STL怎么做内存管理3. 如何解决哈希冲突&#xff1f;4. vector手动释放内存问题5. 对象池思想 1. vector迭代…

基于SSM的校园闲置物品交易平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的校园闲置物品交易平台,java项目…

Advanced RAG 09:『提示词压缩』技术综述

编者按&#xff1a; 如何最大限度地发挥 LLMs 的强大能力&#xff0c;同时还能控制其推理成本&#xff1f;这是当前业界研究的一个热点课题。 针对这一问题&#xff0c;本期精心选取了一篇关于"提示词压缩"(Prompt Compression)技术的综述文章。正如作者所说&#xf…

Zookeeper 四、Zookeeper应用场景

Zookeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架&#xff0c;我们可以使用它来进行分布式数据的发布与订阅。另一方面&#xff0c;通过对Zookeeper中丰富的数据节点类型进行交叉使用&#xff0c;配合Watcher事件通知机制&#xff0c;可以非常方便地构建一系列分…

八爪鱼现金流-032,给用户发邮件提示功能

每个月的 5 号、15 号、25 号的 17:30 工资日&#xff0c;给用户发送邮件&#xff0c;提示记账月报。 您也来记账一笔吧。 然后首页能看到趋势图。 八爪鱼现金流 八爪鱼

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

3072. 将元素分配到两个数组中 II Hard

给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中&a…

LeetCode 算法:二叉树的右视图 c++

原题链接&#x1f517;&#xff1a;二叉树的右视图 难度&#xff1a;中等⭐️⭐️ 题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4…

算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型

数字经济时代&#xff0c;算力成为支撑经济社会发展新的关键生产力&#xff0c;全球主要经济体都在加快推进算力战略布局。随着大模型持续选代&#xff0c;模型能力不断增强&#xff0c;带来算力需求持续增长。算力对数字经济和GDP的提高有显著的带动作用&#xff0c;根据IDC、…

【面试系列】Elasticsearch 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

java基础知识点全集

JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征&#xff08;1&#xff09; 封装&#xff08;2&#xff09;继承&#xff08;3&#xff09;多态 2. 类的实例化&#xff08;1&#xff09; 类通过NEW来创建&#xff08;2&#xff09; 类的继承&…

ARP认识与学习

第1步&#xff1a; 进入root模式&#xff0c;使用iwonfig或者ifconfig &#xff0c;查看目前的网段&#xff1b; iwconfig ifconfig第2步&#xff1a; 扫描网段的其他连接设备&#xff0c;根据实际的网段填写 nmap 192.168.3.0-255第3步&#xff1a; 1表示帮助转发数据&#…

AH1117-3.3芯片使用记录

今天在新做好的电路板上测试电源时发现一个问题&#xff0c;那就是散热端不能接地&#xff0c;接地了就好像短路一样&#xff0c;芯片会热的厉害&#xff0c;当我把该引脚与地的所有连接都切断后&#xff0c;短路现象消失&#xff0c;特此记录一下&#xff0c;防止自己下次再犯…

本地Navicat/客户端连接阿里云RDSMySQL时遇到过的问题及解决

1.之前开发的RDS MySQL版本和本地MySQL版本最好接近&#xff0c;比如8.0.28和8.0.20好像都是可以兼容的&#xff0c;他们里面都有那个utf8的字符编码&#xff0c;但是后面我选的RDS MySQL版本有点新&#xff0c;是8.0.30甚至更新的版本&#xff0c;之前用C#语言写的连接MySQL以…