我有一个组件在订阅的页面上显示一些数据。Angular2 - 克隆变量以不修改源
我正在尝试clone
该变量并对其进行更改,而不会影响用于呈现页面视图的原始数据。
import { UtilsService } from '../shared';
import { Component, Input, OnInit } from '@angular/core';
@Component({
selector: 'app-review',
templateUrl: './review.component.html',
styleUrls: ['./review.component.css']
})
export class ReviewComponent implements OnInit {
@Input() payload: any = null;
// Object of strings that are used for the details
langStr: any = {
noDepartment: 'No Department Change',
noSegment: 'No Segment Change',
noMarket: 'No Budget Market Change',
noIncentive: 'No Incentive Plan Change',
noRole: 'No Role Change',
noProductionDate: 'No Production Date Change',
noLanguage: 'No Language Change',
noShift: 'No Shift Change',
noSupervisor: 'No Supervisor Change'
};
// Used to scan through the final payload and assign default values if missing
optionalFields = ['budgetMarket',
'hierarchy',
'incentivePlan',
'primaryLanguage',
'secondaryLanguage',
'role',
'segment',
'shiftID',
'supervisor'];
modifiedData: any;
constructor(
private utils: UtilsService
) {
}
ngOnInit() { }
submitChanges() {
this.modifiedData = this.payload;
// Loop over all of the keys in our formData object
for (const key in this.modifiedData.formData) {
// Find shift by property if the key exists within our defined array
if (this.modifiedData.formData.hasOwnProperty(key) && this.utils.isInArray(this.optionalFields, key)) {
// If our object data doesnt have a value, set it to -1
if (!this.modifiedData.formData[key].length) {
this.modifiedData.formData[key] = '-1';
}
}
}
// Send to database
console.log(this.modifiedData)
}
}
在上面这种情况下,我想我的认购this.payload
数据设置为一个名为modifiedData
新的变量。然后,我修改了该作业中的一些数据。
但是,只要我调用函数submitChanges()
,我的HTML视图就会对modifiedData
所做的更改进行更新,即使它未订阅该更新。
我认为这是this.modifiedData = this.payload;
以某种方式更新原始数据()。
有没有办法做到这一点,其中不会被触及。我基本上只是克隆它,并在将其提交给我的数据库调用之前进行一些更改。
不是重复的,因为他没有询问如何克隆,而是因为他的代码中的错误,这是因为在引用方面如何处理对象。虽然 – lexith