首页 > 其他分享 >vue2子组件拷贝父组件传递的参数

vue2子组件拷贝父组件传递的参数

时间:2023-12-15 10:24:53浏览次数:28  
标签:obj 对象 JSON 参数 vue2 组件 拷贝

在 Vue2 中,父组件向子组件传递参数时,如果参数是对象或数组(即非基本数据类型),那么子组件可以直接修改这个参数,这会影响到父组件的数据。如果你想避免这种情况,你可以让子组件对父组件的传参进行深度拷贝。这样,子组件就可以自由修改拷贝后的参数,而不会影响到父组件的数据。

这是一个例子,假设父组件向子组件传递一个对象类型的参数 obj

<!-- 父组件 -->
<template>
  <div>
    <child :obj="parentObj"></child>
  </div>
</template>
 
<script>
import Child from './Child.vue';
 
export default {
  data() {
    return {
      parentObj: { a: 1, b: 2 },
    };
  },
  components: {
    Child,
  },
};
</script>

子组件可以这样进行深度拷贝:

<!-- 子组件 -->
<template>
  <div>
    <!-- 在这里使用 copyOfObj,而不是直接使用 obj -->
  </div>
</template>
 
<script>
export default {
  props: {
    obj: {
      type: Object,
      required: true,
    },
  },
  data() {
    return {
      // 使用 JSON 方法进行深度拷贝
      copyOfObj: JSON.parse(JSON.stringify(this.obj)),
    };
  },
};
</script>

注意这里使用了 JSON.parse(JSON.stringify(this.obj)) 来进行深度拷贝。这种方法简单易用,但它有一些限制,比如它不能拷贝函数。如果你的对象中包含函数,你可能需要使用其他库,比如 lodash 的 _.cloneDeep 方法,来进行深度拷贝。

浅拷贝:

在Vue中,let copyObject = {...object}这种写法被称为对象扩展或对象解构。它是一种创建新对象并将旧对象属性复制到新对象的方式。用这种方法复制对象不会影响原始对象,因为新的对象有自己的内存空间。

这种写法在JavaScript ES6版本中被引入。这也被称为"浅复制",因为它只复制对象的第一层属性,而不是所有嵌套的属性。这意味着如果你的对象有嵌套的对象或数组,那么新的复制对象和原始对象将共享这些嵌套的对象或数组。

标签:obj,对象,JSON,参数,vue2,组件,拷贝
From: https://www.cnblogs.com/harry034/p/17902773.html

相关文章

  • C++ Qt开发:ProgressBar进度条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。ProgressBar(进度条)是在Qt中常用的用户界面组件之一......
  • 界面组件DevExpress VCL v23.2新功能预览 - 支持RAD Studio 12.0
    本文即将发布DevExpressVCL 下一个主要更新(v23.2),在之前的文章中(点击这里回顾>>)我们为大家介绍了新的工具提示、图表空间中的标签重叠等,本文将主要介绍DevExpressVCLv23.2中将支持的RADStudio12.0、增强的图像选择器、字体和自定义图标包等。新版即将发布,敬请期待哦~获取De......
  • js实现深拷贝复制的方法
    utils/deepCopy.jsexportdefaultfunctiondeepCopy(obj){//深拷贝方法if(typeofobj!=='object'||obj===null){ returnobj;}letcopy;if(objinstanceofArray){ copy=[]; for(leti=0;i<obj.length;i++){ copy[i]=d......
  • 【活动回顾】Databend 云数仓与 Databend Playground 扩展组件介绍
    2023年12月7日,作为KubeSphere的合作伙伴,Databend荣幸地受邀参与了KubeSphere社区主办的云原生技术直播活动。本次活动的核心议题为「Databend云数仓与DatabendPlayground扩展组件介绍」,此次分享由DatabendLabs的研发工程师尚卓燃担任主讲嘉宾,向与会者呈现了一场......
  • Vue2 校验不通过的表单,赋正确的值后,再次校验结果不变
    前言在工作中遇到了这个问题,多次排查,耗费了不少时间才解决这个问题。问题的解决很简单,但发现根本原因还是有点困难,因此在此做个记录,以防忘记。问题发现步骤例如有以下AntDesignVue表单<a-form-modelref="formRef":model="model"><a-form-model-itemlabel="姓名"pr......
  • kettle更新组件(insert_update)
    2种装载方式:全量装载和增量装载插入更新与表到表区别:表到表:只追加数据,不管表里重不重复插入更新:对比关键字段,更新所有数据(不会删除)创建数据流:需求:表输入组件只是将数据追加装载到表中,并不是我们想要的更新数据:如下:插入/更新匹配关键字id=id保留关键字的字段,用来匹......
  • vue2 中 el-table 实现树形列表,支持增删改等操作
    需求场景:el-table构造一个树形列表,支持新增节点,删除,修改等操作。实现效果思路 一般的el-table增删改,我们都很熟悉;关键在于实现一个纯前端的树形列表,最终再调接口存列表数据。     树形el-table,需要设置 row-key,一般为id,所以每新增一条数据,都必须有id。需......
  • C++ Qt开发:ComboBox下拉组合框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。在Qt中,ComboBox(组合框)是一种常用的用户界面控件,它......
  • 推荐一个小而全的第三方登录开源组件
    大家好,我是Java陈序员。我们在企业开发中,常常需要实现登录功能,而有时候为了方便,就需要集成第三方平台的授权登录。如常见的微信登录、微博登录等,免去了用户注册步骤,提高了用户体验。为了业务考虑,我们有时候集成的不仅仅是一两个第三方平台,甚至更多。这就会大大的提高了工作量,那......
  • vue路由切换时内容组件的滚动条回到顶部
    vue路由切换时内容组件的滚动条回到顶部:https://blog.csdn.net/Macao7_W/article/details/125517519?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170252373016800185826420%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=......