Auc的个人博客

vuePress-theme-reco Auc    2020 - 2021
Auc的个人博客 Auc的个人博客

选择一个主题吧~

  • 暗黑
  • 自动
  • 明亮
主页
分类
  • JavaScript
  • Vue
  • 数据结构与算法
  • 文档
  • 面试题
  • 笔记
标签
笔记
  • CSS
  • ES6
  • JavaScript
  • Vue
  • C语言
文档
  • Vueのapi
  • Vue Router
  • axios
  • Vue CLI
面试
  • JS
  • Vue
  • 基础
时间线
联系我
  • GitHub (opens new window)
author-avatar

Auc

62

文章

11

标签

主页
分类
  • JavaScript
  • Vue
  • 数据结构与算法
  • 文档
  • 面试题
  • 笔记
标签
笔记
  • CSS
  • ES6
  • JavaScript
  • Vue
  • C语言
文档
  • Vueのapi
  • Vue Router
  • axios
  • Vue CLI
面试
  • JS
  • Vue
  • 基础
时间线
联系我
  • GitHub (opens new window)
  • Vue

    • Vue 无法检测的数组改动问题
    • Vue 组件之间的通信方式
    • 造轮子 - 双向数据绑定

Vue 无法检测的数组改动问题

vuePress-theme-reco Auc    2020 - 2021

Vue 无法检测的数组改动问题

Auc 2020-03-07 一些坑Vue

# Vue无法检测变化的数组操作

今天遇到了一个问题,当我试图更改 Vue 数据项中的数组中的项时,发现试图没有变化。

const vm = new Vue({
  data: {
    arr: [1, 2, 3]
  }
});
vm.arr[0] = -1;
1
2
3
4
5
6

# 原因

查阅资料得知 由于 JavaScript 的限制,Vue 不能检测到以下数组/对象的变动:

  1. 通过索引直接设置一个数组项时,例如:vm.arr[index] = newValue
  2. 修改数组的长度时,例如:vm.arr.length = newLength

# 解决方案

1. 解决第一类情况 Vue.set() 点击传送门

// Vue.set
Vue.set(vm.arr, index, newValue)
// vm.$set,Vue.set的一个别名
vm.$set(vm.arr, index, newValue)
// Array.prototype.splice
vm.items.splice(index, 1, newValue)
1
2
3
4
5
6

2. 解决第二类情况

// Array.prototype.splice
vm.items.splice(newLength)
1
2