Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 4无理由更新属性_Angular - Fatal编程技术网

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()这是一个简单的黑客:)这不是一个黑客。基于某个对象拥有不同的对象是一种标准方法。