开发者问题收集

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