Angular2 - 从订阅的可观察对象将数据推送到数组
2017-07-12
1712
我有一个订阅了
Subject
的组件,单击按钮即可接收数据。
我将这些数据存储在一个数组中,一切运行正常。但是,我试图仅将新数据推送到数组,而不是任何已经存在的重复数据。
我使用
lodash
中的
_uniqBy
方法实现了这一点。
我的问题是,每次按下按钮时,它都会覆盖我的
importResults
数组,而不是仅将不存在的数据推送到它。
import { Component, Input, OnChanges, OnInit, NgModule } from '@angular/core';
import { MassEmpService } from '../shared';
import { ImportResults } from '../definitions';
import * as _ from "lodash";
@Component({
selector: 'app-employee-selection',
templateUrl: './employee-selection.component.html',
styleUrls: ['./employee-selection.component.css']
})
export class EmployeeSelectionComponent implements OnInit {
// Define our search results
importResults: ImportResults[];
constructor(
private _massEmpService: MassEmpService
) {
}
ngOnInit() {
// Subscribe to our subject that lets us know about the added employees
this._massEmpService.importedData.subscribe(obj => {
if (obj) {
// Ensure that we have unique results in our imported data
this.importResults.push(_.uniqBy(obj, 'QID'));
}
});
}
// On clear employees
clearEmployees() {
this._massEmpService.updateImportData(null);
}
}
当我尝试使用
push
时,出现错误
ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'push' of undefined
。
我的最终目标是,如果数据尚不存在,我只想将数据推送到
importResults
,而不是覆盖整个内容。
更新:
更改
importResults: ImportResults[];
到
importResults: ImportResults[] = [];
似乎已经改变了我的数据结构,现在
*ngFor
没有显示数据。
初始化之前:
初始化之后:
HTML:
<tr *ngFor="let i of importResults">
</tr>
1个回答
问题是您只声明了变量而没有初始化,这就是它抛出错误的原因。
只需更新 -
importResults: ImportResults[] =[] ;
这将解决您的问题。
更新 正如您所说,推送数据会改变结构,然后您必须对结果中的每个结构执行此操作。 例如
_.uniqBy(obj, 'QID'). ForEach(p => this.importResults.push(p)); }
Faizal Shap
2017-07-12