Angular 4无理由更新属性
我想设置Angular 4无理由更新属性,angular,Angular,我想设置this.viewSegmentsForAnalysis=this.segmentsForAnalysis仅在ngOnInit()期间执行一次。但是,当我调用此方法时,addSegmentsForAnalysis()会将this.viewSegmentsForAnalysis的值更新为this.segmentsForAnalysis。是什么导致它更新的 ngOnInit() { this.segmentsForAnalysis = this.submissionDetails.seg
this.viewSegmentsForAnalysis=this.segmentsForAnalysis代码>仅在ngOnInit()期间执行一次。但是,当我调用此方法时,addSegmentsForAnalysis()
会将this.viewSegmentsForAnalysis
的值更新为this.segmentsForAnalysis
。是什么导致它更新的
ngOnInit() {
this.segmentsForAnalysis = this.submissionDetails.segmentations.filter((segment) => {
return segment.columns.length === 1;
});
this.viewSegmentsForAnalysis = this.segmentsForAnalysis;
}
addSegmentsForAnalysis() {
this.segmentsForAnalysis.push({
name: this.fileColumn.value,
overlapAnalysis: false,
columns: [{
index: segmentIndex,
name: this.segmentTitle.value
}]
});
}
this.viewSegmentsForAnalysis=this.segmentsForAnalysis;
将viewSegmentsForAnalysis指定给segmentsForAnalysis时,它将viewSegmentsForAnalysis引用与segmentsForAnalysis相同的对象。当您在SegmentsForAnysis中更改任何内容时,很明显,引用同一对象的两个变量都会进行更新
要解决此问题,您需要为viewSegmentsForAnalysis创建另一个对象。要执行此操作,请替换this.viewSegmentsForAnalysis=this.segmentsForAnalysis;与
this.viewSegmentsForAnalysis = JSON.parse(JSON.stringify(this.segmentsForAnalysis));
您可以使用.slice()
方法使引用的数组对象具有一组新值。它将基于您的数组segmentsForAnalysis
,并将创建一个新的数组集。因此,除非您再次调用ngOnInit
,否则它不会被更新。
除非再次创建组件,否则不会发生这种情况
所以用这个:
ngOnInit(){
.......
this.viewSegmentsForAnalysis = this.segmentsForAnalysis.slice();
// add .slice here -------------------------------^^^^^^^^
}
因为this.viewSegmentsForAnalysis
指向同一个对象,该对象正在方法中更新。如何设置this.viewSegmentsForAnalysis=this.segmentsForAnalysis代码>仅在ngOnInit()
上使用一次。使用this.viewSegmentsForAnalysis=this.segmentsForAnalysis.slice()代码>这是一个简单的黑客:)这不是一个黑客。基于某个对象拥有不同的对象是一种标准方法。