Vue项目,通过数组下标更改数组的值不生效,页面没有重新渲染

2023-11-11

大家好,我是小梅,公众号:「小梅的前端之路」 原创作者。

作为在前端领域不断探索的一员,在此记录开发中遇到的问题,如果你也遇到了相同的问题,希望本文对你有帮助。


问题背景:今天在开发中遇到了一个需要,在列表里要通过按钮的点击控制手机号码列是显示正常的号码还是显示星号******。

页面大致原型:

id 手机号码 操作
1 13400003333 显示手机号(按钮)
2 *********** 显示手机号(按钮)

首先想到的实现方式就是给表格的每条数据增加一个showFlag属性,showFlag:true显示正常的手机号,showFlag:false显示星号*****。点击按钮就修改该条数据的showFlag的值。简易代码如下:

// 页面简易代码,大家理解这个意思就行
<div v-for="item in list">
    <span v-if="item.showFlag">{{ item.phone }}</span>
    <span v-else>******</span>
</div>


// 数据
data() {
    return {
        list: []
    }
},
created() {
    this.getList()
},
methods: {
    // 显示手机号按钮的点击方法
    clickBtn(index) {
        this.list[index].showFlag = !this.list[index].showFlag 
    },
    // 获取列表数据的方法
    getList() {
        this.list = [
                { id: 1, phone: 13400003333 },
                { id: 2, phone: 13400005555 }
              ]
        this.list.map(item => {
            item.showFlag = false
        })
    }
}

看代码感觉逻辑万无一失,实际情况就是:点击第一下:从*****变成数字,再点击这条数据的按钮,页面显示并不会从数字变换成*****。

产生问题的原因:Vue2并不支持数组下标的响应式。也就是说Vue2检测不到通过下标更改数组的值。

解决办法:使用Vue官网提供的方法更改数组下标的值

  // 显示手机号按钮的点击方法
    clickBtn(index) {
        this.list[index].showFlag = !this.list[index].showFlag
        // 增加下面这行代码
        this.$set(this.list, index, this.list[index])
    },

至于为啥Vue2不支持这个可以看官网尤大给的解释

 也就是说其实是可以实现数组下标的响应式的,出于性能考虑,Vue2并没有实现。大家可以尝试手动实现对数组下标的监听:

var arr = [1, 2, 3]
arr.forEach((item, index) => {
  Object.defineProperty(arr, index, {
    set: function(val) {
      console.log('set', val)
      item = val
    },
    get: function() {
      console.log('get', item)
      return item
    }
  })
})

arr[1] // get 2
arr[1] = 33 // set 33
arr[1] // get 33

❤️欢迎素质三连[点赞 + 收藏 + 评论]

我是小梅,有兴趣的话可以在微信搜一搜「小梅的前端之路」第一时间接收文章更新通知,一起沟通、学习成长呀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue项目,通过数组下标更改数组的值不生效,页面没有重新渲染 的相关文章

  • 如何在 Nuxt 中点击链接下载文件?

    我遇到了一个边缘情况问题 如果用户浏览几条 Nuxt 路线 单击网站 徽标 这是一个锚标记返回主页 然后单击浏览器本机后退按钮 最后单击一个应该的链接要打开 pdf 它会重定向到我的 404 页面 如果用户在页面加载时单击 pdf 链接 它
  • 如何为 VueJS 项目设置根/基 URL

    我已经部署了一个VueJS项目到像这样的域www example com 但是 我想将其移动到子文件夹 以便我可以像这样访问它www example com v1 如何设置基础 URL 或根 URLVueJS项目 注意 这与基本 URL 无
  • node.js、vue.js 和express.js 堆栈开发

    我正在尝试使用 Linux 上的 Visual Studio Code IDE 使用 vue js express js 和 node js 创建一个 Web 应用程序 根据网上的一些文档 我读到安装 vue js 后 可以创建一个vue
  • Laravel Echo 不监听推送事件

    尝试使用 laravel 和 vuejs 创建一种聊天应用程序 发送消息后 我会从 laravel 触发事件 该事件会使用正确的事件类反映在推送器调试控制台上 但根本不会调用来自 vuejs 的监听回调 created window Ech
  • 如何修复套接字 io 中的 400 错误错误请求?

    我有一个前端应用程序 VUE JS 我有一个后端 Nest JS Vue JS 应用程序使用 vue socket io extended 库通过 websockets 从后端获取数据 当 Vue JS 应用程序启动时 我在浏览器中看到错误
  • Vue 3:使用渲染函数将所有项目包装在一个自定义组件中

    我正在尝试建立自己的sortable成分 我想将项目列表传递到它的默认插槽 然后 可排序组件应该用自定义包装所有传递的项目v draggable成分
  • Vue.js 更改 {{ }} 标签

    我想改变 something by 在 Vue js 中 我怎样才能实现这一点 这可能吗 我在 AngularJS 中寻找的等效项 var app angular module app function interpolateProvide
  • 如何在 vuex nuxt 中获取嵌套 getter

    i have store index js像这样 new Vuex Store modules nav namespaced true modules message namespaced true state count 0 conver
  • Vue js - 在同一级别的两个组件内传递数据

    我有需要从一个传递的数据component1到另一个component2 我不使用vuex or router 组件树 Parent Component1 Component2 从一开始component1我发出 ajax 请求 检索信息并
  • Nuxt.js 多个资源的根路由和根级 slugs

    我正在使用 Nuxt 构建一个电子商务前端 我希望为尽可能多的资源提供根级 slugs 最重要的是目录路径和产品 URL 一个明显的方法是使用 Nuxt 文件结构进行路由创建 com category men Tshirt com cate
  • 不使用Vue可以使用Vuex吗? (Vuex 服务器端?)

    Vuex 抱怨如果不调用 Vue use Vuex 就无法创建新的 store 实例 虽然这通常没问题 但我正在摆弄使用同一商店编写后端 前端的想法 有人知道答案吗 Thanks TL DR 你可以在 Node 中完美使用 Vuex 无需浏
  • 未向导出的模块提供此上下文

    我对问题的提出感到不满意 受到鼓励提出改进建议 另外 请记住 由于无知 无知导致烦恼 我对问题的诊断可能有缺陷 对于那个很抱歉 In 这个答案 https stackoverflow com a 40893583 1525840建议使用th
  • vue如何检测页面是否刷新?

    我尝试这样 created window addEventListener beforeunload function event event returnValue Write something this router push 像这样
  • 在新窗口中打开 VueJS 组件

    我有一个只有一页的基本 VueJS 应用程序 它不是 SPA 而且我不使用 vue router 我想实现一个按钮 单击该按钮时会使用我的 Vue 组件之一的内容执行 window open 函数 查看来自的文档window open ht
  • 在 Vue.js 中隐藏 div onclick

    以下 jQuery 的 Vue js 等价物是什么 btn click function hideMe hide jQuery 开箱即用 而 Vue js 则不然 要初始化 Vue js 组件或应用程序 您必须将该组件及其数据绑定到模板内的
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev
  • 如何解决【Vue warn】:使用数组语法时 props 必须是字符串?

    我的看法是这样的 div class col md 8 div
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe

随机推荐

  • 【代码随想录-刷题学习JavaScript】day4-字符串

    一 344 反转字符串 二 541 反转字符串II 三 剑指Offer 05 替换空格 四 151 翻转字符串里的单词 五 剑指Offer58 II 左旋转字符串 六 28 实现 strStr 七 459 重复的子字符串 八 字符串总结 九
  • Python安装数据库SqlServer\MySql访问组件

    首先要说明是基于Python3 6 3的 安装方法有所不同 以前网上说的一些方法试了基本没用 踩过了坑 现在列一下我的成功安装方法给坑友们 系统环境 win10企业版64位 开发环境 vs2015 Python版本 3 6 3 64位 一
  • redis执行日志_Redis之坑:Redis与MySQL中事务的区别

    MySQL BEGIN 显式地开启一个事务 COMMIT 提交事务 将对数据库进行的所有修改变成为永久性的 ROLLBACK 结束用户的事务 并撤销正在进行的所有未提交的修改 Redis MULTI 标记事务的开始 EXEC 执行事务的co
  • 单词统计(C语言)

    简述 输入一串英文字符串 统计出现的单词数目 流程图 原理简述 定义一个字符串数组char a 100 用于接收输入的字符串 输入字符串本处运用的gets 函数 作用是从终端输入一串字符到定义的字符数组中 函数返回值是数组地址 为方便表示
  • QT QTreeWidget 控件 学习笔记

    首先我们了解一下 QTreeWidget的属性 1 QTreeWidget 控件的创建 QTreeWidget tw 单独的树 QTreeWidget tw w 在w界面里的树 2 往tw中添加子节点 创建一个新结点 设置结点中包含的数据
  • Ubuntu:安装deb文件包

    sudo dpkg i deb 如果报依赖错误执行下面语句再试 sudo apt get f fix missing install
  • query和params传参的区别

    一 query和params传参的区别 1 query传递显示参数 params传递不显示参数 params相对于query来说较安全一点 取值方法也有不同 1 query取值 this r o u t e
  • ubuntu启动时黑屏,无法进入登录界面

    方式1 1 重新启动客户机 2 点击屏幕立即长按左shift键或ESC 3 出现grub菜单后选择第二个 4 又出现一个列表继续选择第二个 5 下一个页面选择第一个 6 下一个界面点击OK就可以了 但不能保证下次开机时能不能进入 方式2 在
  • django梳理

    概述 1 框架推导流程 web框架 Yietong309的博客 CSDN博客 前期准备知识 2 django请求生命周期流程图 客户端发送HTTP发送request请求 经过网关发送到中间件 在经过路由层 视图层 模型层 模板层 这两个都与
  • 鸿蒙-实践课程一 android、ios、HarmonyOS

    目前ide对于js调试还是如其它android ios一样 存在较多缺陷 config json配置导致中间调试的断层 建议初学者如果是java或者语言类转入 可以先用java语言进行学习 首先 你需要理清楚 Ability AceAbil
  • pygraphviz安装教程

    0x01 背景 最近在做casual inference 做实验时候想因果图可视化 遂需要安装pygraphviz 整了一下午 终于捣鼓好了 真头大 环境 win10操作系统 python3 9环境 在这里 如果有conda环境 直接可以使
  • 代码级测试

    代码级测试的测试方法一定是一套测试方法的集合 而不是一个测试方法 因为单靠一种测试方法不可能发现所有潜在的错误 一定是一种方法解决一部分或者一类问题 然后综合运用多种方法解决全部问题 常见代码错误类型 第一 语法特征错误 语法特征错误是指
  • 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议110~117)

    不管人类的思维有多么缜密 也存在 智者千虑必有一失 的缺憾 无论计算机技术怎么发展 也不可能穷尽所有的场景 这个世界是不完美的 是有缺陷的 完美的世界只存在于理想中 对于软件帝国的缔造者来说 程序也是不完美的 异常情况会随时出现 我们需要它
  • 系统调用(int 0x80)详解

    1 系统调用初始化 在系统启动时 会在sched init void 函数中调用set system gate 0x80 system call 设置中断向量号0x80的中断描述符 define set system gate n addr
  • Python基础知识题库(带答案)

    单项选择题 第一章python语法基础 1 Python 3 x 版本的保留字总数是C A 27 B 29 C 33 D 16 2 以下选项中 不是 Python 语言保留字的是C A while B pass C do D except
  • python爬取网页的方法总结,python3.9爬取网页教程

    大家好 小编为大家解答python 爬取网页内容并保存到数据库的问题 很多人还不知道利用python爬取简单网页数据步骤 现在让我们一起来看看吧 需求分析 今天遇到一个简单的需求 需要下载澳大利亚电力市场NEM日前市场的发电商报价数据 ne
  • LeetCode题目笔记——965. 单值二叉树

    文章目录 题目描述 题目链接 题目难度 简单 方法一 遍历 哈希表 代码 Python 方法二 深度优先 代码 Python 总结 题目描述 如果二叉树每个节点都具有相同的值 那么该二叉树就是单值二叉树 只有给定的树是单值二叉树时 才返回
  • Field 'id' doesn't have a default value问题解决方法

    Field id doesn t have a default value问题解决方法 突然想温习温习对数据库的读写 于是就用mysql建了一张单独的表 见代码1 用Hibernate写了个应用 可以正常查询 修改数据了 开始时 数据是在m
  • IDEA——Java:程序包xxxx不存在终极方案总结

    最近在接手一个新的java项目 导入到IDEA后发现存在报错 程序包找不到 寻思应该是某些依赖没有加载进来 但几番尝试后发现问题依旧 于是决定调研下对应的解决方案 说实话类似这种问题的解决方案网上一搜一大堆 但试了很多根本不管用 其实大多数
  • Vue项目,通过数组下标更改数组的值不生效,页面没有重新渲染

    大家好 我是小梅 公众号 小梅的前端之路 原创作者 作为在前端领域不断探索的一员 在此记录开发中遇到的问题 如果你也遇到了相同的问题 希望本文对你有帮助 问题背景 今天在开发中遇到了一个需要 在列表里要通过按钮的点击控制手机号码列是显示正常