【问题】 在进行子父组件传值时,使用对象进行了传值。发现重置功能不可用。点击重置功能毫无作用 下面来详细分析一下我的代码部分: 【子组件代码】 【问题分析】 引用类型:把值和地址想成比作面包和面包存放的地址。 复制引用类型的浅复制:A拥有面包和面包的地址,然后将A复制给B,那么B只是知道了面包存放的地址。 复制引用类型的深复制:将A复制给B,不仅有了地址,而且B还有了自己的面包。 所以我们上面的就是引用类型的浅复制,将http的get请求的数据获取后,复制给了productInfo和 productInfoTmp,然后在子组件中使用,这个时候我们只是对同一个地址的同一个面包进行修改,所以对 productInfo修改后,productInfoTmp也和productInfo保持一致。所以上述的重置并不是没有运行,而且重置后还是一样的值。 【解决方案】 将查询结果赋值给productInfoTmp时,采用引用类型深复制的方法
【父组件代码】//-------------------------------------点击编辑按钮后的js代码------------------------------------------- this.title = "编辑产品"//抽屉的标题 //根据产品ID查询对应产品信息 this.$http.get(getProductInfoById+productId).then(res=>{ this.productInfo=res.data//传输到子组件的产品数据 this.productInfoTmp=res.data//传输到子组件作为重置的临时数据 }) //-------------------------------------父组件中引用子组件的代码------------------------------------------- <product-drawer :productInfo="productInfo" :productInfoTmp="productInfoTmp" :title="title" :visible.sync="drawerVisible" ></product-drawer>
//-------------------------------子组件中父组件传输过来的数据的props代码------------------------------------------- visible: {//抽屉的显示与隐藏 type: Boolean, default: false }, title: {//抽屉的标题 type: String, default: '' }, productInfo: {//产品信息 type: Object, default: function () { return {} } }, productInfoTmp: {//作为重置的产品信息 type: Object, default: function () { return {} } } //-------------------------------子组件中的重置按钮代码------------------------------------------- resetForm() { this.productInfo=this.productInfoTmp //this.$emit('update:visible', false); }
从子组件的props设置可以看出, productInfo和 productInfoTmp都是Object对象,那么这个就是引用类型。
简单描述一下引用类型复制的特点:this.title = "编辑产品"//抽屉的标题 //根据产品ID查询对应产品信息 this.$http.get(getProductInfoById+productId).then(res=>{ this.productInfo=res.data this.productInfoTmp.name=res.data.name this.productInfoTmp.description=res.data.description this.productInfoTmp.remark=res.data.remark })
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算