【发布时间】:2017-07-31 17:49:48
【问题描述】:
我有一个组件在订阅页面上显示一些数据。
我正在尝试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; 以某种方式更新原始数据 (payload) 有关。
有没有办法做到这一点,payload 不会被触及。在将其提交到我的数据库调用之前,我基本上只是克隆它并进行一些更改。
【问题讨论】:
-
并不是真正的重复,因为他不是在询问如何克隆,而是因为他的代码中的错误是因为在引用方面如何处理对象。两者都导致相同的答案
标签: angular typescript