iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >Vue不能观察到数组length的变化怎么办
  • 167
分享到

Vue不能观察到数组length的变化怎么办

2024-04-02 19:04:59 167人浏览 独家记忆
摘要

这篇文章主要介绍了Vue不能观察到数组length的变化怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于 javascript 的限

这篇文章主要介绍了Vue不能观察到数组length的变化怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

由于 javascript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如:vm.items.length = newLength

因为vue的响应式是通过 Object.defineProperty 来实现的,但是数组的length属性是不能添加getter和setter,所有无法通过观察length来判断。

为什么Vue不能观察到数组length的变化

如下代码,虽然看起来数组的length是10,但是for in的时候只能遍历出0, 1, 2,导致了只有前三个索引被加上了getter 和setter

var a = [0, 1, 2]
a.length = 10
// 只是显示的给length赋值,索引3-9的对应的value也会赋值undefined
// 但是索引3-9的key都是没有值的
// 我们可以用for-in打印,只会打印0,1,2
for (var key in a) {
 console.log(key) // 0,1,2
}

那么vue提供了一些解决方法

使用内置的Vue.$set

让数组显式的进行某个索引的观察 Vue.set(array, indexOfItem, newValue)

实际上是调用了

Object.defineProperty(array, indexOfItem, {
 enumerable: true,
 configurable: true,
 get() { },
 set(newVal) { }
})

这样可以手动指定需要观察的key,那么就可以达到预期的效果。

重写了 push, pop, shift, unshift, splice, sort, reverse方法

Vue源码

const arrayProto = Array.prototype
export const arrayMethods = Object.create(arrayProto)


;[
 'push',
 'pop',
 'shift',
 'unshift',
 'splice',
 'sort',
 'reverse'
]
.forEach(function (method) {
 // cache original method
 const original = arrayProto[method]
 def(arrayMethods, method, function mutator (...args) {
  const result = original.apply(this, args)
  const ob = this.__ob__
  let inserted
  switch (method) {
   case 'push':
   case 'unshift':
    inserted = args
    break
   case 'splice':
    inserted = args.slice(2)
    break
  }
  if (inserted) ob.observeArray(inserted)
  // notify change
  ob.dep.notify()
  return result
 })
})

这些是在Array.__proto__上 进行了方法重写或者添加

并且对添加属性的方法如 push,unshift,splice 所添加进来的新属性进行手动观察,源码为

if (inserted) ob.observeArray(inserted)

对以上方法进行了手动的进行消息触发

ob.dep.notify()

感谢你能够认真阅读完这篇文章,希望小编分享的“Vue不能观察到数组length的变化怎么办”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网html频道,更多相关知识等着你来学习!

--结束END--

本文标题: Vue不能观察到数组length的变化怎么办

本文链接: https://www.lsjlt.com/news/73371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue不能观察到数组length的变化怎么办
    这篇文章主要介绍了Vue不能观察到数组length的变化怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于 JavaScript 的限...
    99+
    2024-04-02
  • Vuex无法观察到值变化怎么办
    这篇文章主要为大家展示了“Vuex无法观察到值变化怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vuex无法观察到值变化怎么办”这篇文章吧。在跨越主路由视...
    99+
    2024-04-02
  • VUE 观察者:揭秘数据变化的幕后功臣
    一、Vue 观察者原理 在 Vue 中,观察者对象是负责监视数据变化并通知组件更新的机制。当数据发生变化时,观察者会触发更新机制,以确保组件能够反映最新的数据状态。 Vue 使用数据劫持的方式来实现观察者模式,即在数据对象上设置 gett...
    99+
    2024-02-10
    Vue 观察者 数据变化 响应式系统 更新组件
  • react数组变化不更新怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react数组变化不更新怎么办?react中 一个state数组某元素属性发生变化时,setState页面不更新 写代码过程中,你会发现,如果...
    99+
    2023-05-14
    React
  • VUE 观察者:掌握数据变化的艺术,提升开发效率
    VUE观察者概述 VUE观察者是一种机制,允许您在数据发生改变时执行某些操作。它通过使用特殊的方法来跟踪数据的变化,一旦数据发生改变,就会触发这些方法。观察者可以用于各种各样的目的,例如更新DOM、触发事件或执行异步操作。 VUE观察者...
    99+
    2024-02-10
    VUE观察者 VUE.js 数据绑定 响应式编程 开发效率
  • VUE 观察者:让你的应用程序实时响应数据变化
    VUE 观察者是一种强大的工具,它可以让你在应用程序中实时地响应数据变化。由于 VUE 应用程序中的数据都是响应式的,因此当数据改变时,VUE 会自动更新 DOM,从而让应用程序实时更新。 要使用 VUE 观察者,你需要先创建一个观察器...
    99+
    2024-02-10
    VUE 观察者 响应式数据 computed watch
  • vue中watch检测不到对象属性的变化怎么办
    小编给大家分享一下vue中watch检测不到对象属性的变化怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!正文<template>  <div> &n...
    99+
    2024-04-02
  • Vue 观察者:数据变化的守护神,解密响应式系统的核心
    在 Vue.js 中,每个组件都有一个与之关联的观察者。当组件的数据发生变化时,观察者会自动检测到这些变化,并通知组件更新视图。组件可以监听数据变化并做出相应的反应,例如:更新视图、触发事件或执行其他操作。 Vue.js 的观察者有两种类...
    99+
    2024-02-06
    响应式系统的关键在于观察者(Observers)。观察者是一种对象 它可以监视数据是否发生变化。一旦数据发生变化 观察者就会通知组件更新视图。
  • vue中怎么监听数组变化
    这篇文章主要介绍了vue中怎么监听数组变化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它...
    99+
    2023-06-14
  • Vue不能watch数组和对象变化解决方案
    目录Vue 能监听数组的情况Vue 无法监听数组变化举例无法监听数组变化的情况Vue 无法监听数组变化的解决方案Vue 监听对象Vue 设置监听对象Vue 能监听数组的情况 Vue ...
    99+
    2022-11-13
    Vue watch数组对象变化 Vue watch
  • 关于Vue不能监听(watch)数组变化的解决方法
    目录一、vue监听数组 二、vue无法监听数组变化的情况 一、vue监听数组 vue实际上可以监听数组变化,比如 data () { return { watchA...
    99+
    2024-04-02
  • Vue Watch方法不能监听到数组或对象值的改变怎么解决
    这篇文章主要介绍了Vue Watch方法不能监听到数组或对象值的改变怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue Watch方法不能监听到数组或对象值的改变怎么解决文章都会有...
    99+
    2023-06-29
  • layui下拉框监听不到值的变化怎么办
    这篇文章将为大家详细讲解有关layui下拉框监听不到值的变化怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于layui监听下拉框值得变化,大家都知道官方文档给我们...
    99+
    2024-04-02
  • Vue不能检测数组变动的原因是什么
    小编给大家分享一下Vue不能检测数组变动的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题来源:https://se...
    99+
    2024-04-02
  • Vue改变数组中对象的属性不重新渲染View怎么办
    这篇文章主要介绍Vue改变数组中对象的属性不重新渲染View怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在解决问题之前,我们先来了解下 vue响应性原理: Vue最显著的一个...
    99+
    2024-04-02
  • Webpack热部署检测不到文件变化怎么办
    小编给大家分享一下Webpack热部署检测不到文件变化怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!调研了一下,原来 We...
    99+
    2024-04-02
  • vue-router取不到变化的路由参数如何解决
    本篇内容介绍了“vue-router取不到变化的路由参数如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:在同一个页面下跳转,路由...
    99+
    2023-07-04
  • Vue踩坑之Vue Watch方法不能监听到数组或对象值的改变详解
    目录前言一:利用索引直接改变arr的值 如我在button事件中写的(arr[0]=1000)二:直接修改数组的长度 如this.arr.length=3 总结如下前言 V...
    99+
    2024-04-02
  • Vue无法检测到数组变动怎么解决
    这篇“Vue无法检测到数组变动怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue无法检测到数组变动怎么解决”文章吧...
    99+
    2023-07-04
  • Vue不能检测到Object/Array更新的情况怎么办
    这篇文章主要为大家展示了“Vue不能检测到Object/Array更新的情况怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue不能检测到Object/A...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作