Vue监听一个数组id是否与另一个数组id相同的方法

yizhihongxing

要监听一个数组中对象的属性,需要用到 Vue 中提供的 $watch 或 $watchCollection 方法。具体实现步骤如下:

  1. 在数据中定义两个数组,分别为 idArray 和 targetArray,如下代码所示:
data() {
  return {
    idArray: [1, 2, 3],
    targetArray: [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}, {id: 4, name: 'Peter'}],
  }
}

其中,idArray 是需要监听的数组,targetArray 是需要比较的数组。

  1. created 生命钩子函数中使用 $watch 或 $watchCollection 监听 idArray 数组,当它发生变化时进行对比操作。$watchCollection 在这里用来监听一个数组数据来源的变化,所以当数组内某一对象属性值发生改变时,还需要使用 $watchCollection 来对对象进行监听。
created() {
  this.$watchCollection('targetArray', (newVal, oldVal) => {
    console.log('targetArray has changed')
    this.compareId(newVal, oldVal) // 比较targetArray与idArray中的id是否相同
  })

  this.$watch('idArray', (newVal, oldVal) => {
    console.log('idArray has changed')
    this.compareId(this.targetArray, []) // 将oldVal置为空数组,表示不需要比较旧值
  })
},
  1. 编写 compareId 函数,实现对比操作。遍历 targetArray 中的对象,判断其中的 id 是否在 idArray 中出现过。
compareId(newVal, oldVal) {
  console.log('compareId function')
  for (let item of newVal) {
    if (this.idArray.includes(item.id)) {
      console.log(`${item.id} exist in idArray`)
      // do something
    } else {
      console.log(`${item.id} does not exist in idArray`)
    }
  }
}

完整代码如下:

<template>
  <div>
    <p>idArray: {{idArray}}</p>
    <p>targetArray: {{targetArray}}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      idArray: [1, 2, 3],
      targetArray: [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}, {id: 4, name: 'Peter'}],
    }
  },
  created() {
    this.$watchCollection('targetArray', (newVal, oldVal) => {
      console.log('targetArray has changed')
      this.compareId(newVal, oldVal) // 比较targetArray与idArray中的id是否相同
    })

    this.$watch('idArray', (newVal, oldVal) => {
      console.log('idArray has changed')
      this.compareId(this.targetArray, []) // 将oldVal置为空数组,表示不需要比较旧值
    })
  },
  methods: {
    compareId(newVal, oldVal) {
      console.log('compareId function')
      for (let item of newVal) {
        if (this.idArray.includes(item.id)) {
          console.log(`${item.id} exist in idArray`)
          // do something
        } else {
          console.log(`${item.id} does not exist in idArray`)
        }
      }
    }
  }
}
</script>

示例1:当idArray数组中的id发生变化时,控制台输出如下内容:

idArray has changed
compareId function
1 exist in idArray
2 exist in idArray
3 does not exist in idArray

示例2:当targetArray数组中的一个对象的id发生变化时,控制台输出如下内容:

targetArray has changed
compareId function
1 exist in idArray
2 exist in idArray
4 does not exist in idArray

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue监听一个数组id是否与另一个数组id相同的方法 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 使用Vue开发一个实时性时间转换指令

    下面是使用Vue开发一个实时性时间转换指令的完整攻略: 1. 确定需求和功能 我们的目标是开发一个指令,可以将输入的时间字符串或时间戳转换为实时性时间。具体实现功能如下: 支持将ISO 8601格式的时间字符串(如”2022-02-01T13:01:23Z”)或时间戳(如1643737283)转换为实时性时间; 实时性时间的格式为”X分钟前”、”X小时前”或…

    Vue 2023年5月28日
    00
  • vue深拷贝的3种实现方式小结

    本文将详细讲解三种vue深拷贝的实现方式,分别为递归实现、JSON.parse/stringify、lodash库实现。下面将分为以下几个部分来介绍。 1. 递归实现 递归实现是一种最简单的深拷贝方式,其代码实现如下: function deepClone(obj) { if (obj === null || typeof obj !== "obj…

    Vue 2023年5月27日
    00
  • 详解Webpack如何引入CDN链接来优化编译后的体积

    下面是Webpack如何引入CDN链接来优化编译后的体积的完整攻略。 目录 Webpack如何引入CDN链接来优化编译后的体积 什么是CDN 为什么要使用CDN Webpack如何引入CDN链接 使用CDN代替依赖包 使用externals配置 示例说明 示例一:使用CDN代替依赖包 示例二:使用externals配置 什么是CDN CDN(Content …

    Vue 2023年5月28日
    00
  • vue过滤器实现日期格式化的案例分析

    下面我就为你详细讲解“Vue过滤器实现日期格式化的案例分析”的完整攻略,并且给出两个具体的示例说明。 Vue过滤器实现日期格式化的原理 在Vue中,过滤器(filter)是对需要显示的数据的一种格式化处理方法,可以在页面中直接使用,让数据更加符合人类的阅读习惯。而日期格式化正是过滤器的一种常见应用。它的原理也比较简单,就是通过Date对象的原型方法或者第三方…

    Vue 2023年5月29日
    00
  • vue实现表单验证功能

    下面是关于“Vue实现表单验证功能”的完整攻略: 一、准备工作 在开始实现表单验证之前,我们需要先引入Vue和 Vue-Resource两个依赖库。在html文件中引入它们的CDN链接 <!– Vue.js –> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js…

    Vue 2023年5月27日
    00
  • Vue3生命周期函数和方法详解

    Vue3生命周期函数和方法详解 生命周期函数 Vue3中的生命周期函数有如下: beforeCreate 在实例准备被创建之前,也就是数据观测和初始化事件还没开始的时候触发。在这个阶段无法获取到 data 和 methods 中的数据。此时我们可以在此阶段中做一些初始化的操作,如全局变量的初始化。 export default { beforeCreate(…

    Vue 2023年5月28日
    00
  • vue中SPA单页面应用程序详解

    Vue中SPA单页面应用程序详解 什么是SPA单页面应用程序 SPA全称Single Page Application,意为单页面应用程序。它是一种特殊的网页应用程序,其特点是整个网站只有一个HTML页面,但在页面加载后,所有的页面操作都在该页面上进行,通过Ajax技术实现页面的局部刷新,最终实现不刷新页面的情况下,达到与传统多页面网站相同的用户体验。 Vu…

    Vue 2023年5月27日
    00
  • Vue Vuex搭建vuex环境及vuex求和案例分享

    下面我将详细讲解“Vue Vuex搭建vuex环境及vuex求和案例分享”的完整攻略。 简介 在开发Vue应用的过程中,为了方便数据管理和状态共享,我们通常会使用Vuex。Vuex是一个专为Vue.js设计的状态管理库,它采用集中式存储管理应用的所有组件的状态,使得数据的流动更加明确,从而方便管理和维护。 本文将介绍如何在Vue中搭建Vuex环境,并演示Vu…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部