如何将数据推送到angular2中的模型数组

时间:2017-09-19 07:21:20

标签: arrays angular service models

我有一个存储一些数据的模型。 我在我的服务中创建了一个该模型的数组。就像这个

modelArray: MyModel[];

但是当我尝试将一些数据推送到数组时,它会因错误

而失败
  

无法读取未定义的属性推送

this.modelArray.push(currentData);//THE PROBLEM CODE

我不确定这样做的正确方法。

我的服务代码如下所示:

import { Injectable } from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';

import { NgAuthService } from '../shared-service/service/ng-auth.service';
import { AppLocalStorageService } from '../shared-service/service/app-local-storage.service';
import { MyModel } from './model/my-model';
@Injectable()
export class ModelService {
    authObj: any;
    appConstants: any;
    baseUrl: any;
    count: any;
    modelArray: MyModel[];

    constructor(private http: Http, public ngAuth: NgAuthService, public localStorage: AppLocalStorageService) {
        this.authObj = this.ngAuth.getNgAuth();
        this.appConstants = this.ngAuth.getAppConstant();
        this.baseUrl = this.authObj.apiServiceBaseUri;
    }
    /*Get data using Api*/
    public getCompanydata(sinceId: any, isBookmarked: any) {

        var Url = this.baseUrl + this.ngAuth.getApiUrl('getdata') +'?bookMarked=false&count=25';
        var authData = JSON.parse(this.localStorage.localStorageGet('authorizationData'));
        var token = 'Bearer ' + authData.token;
        var self = this;

        var headers = new Headers();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        headers.append('Authorization', token);

        return this.http.get( Url, { headers: headers, method: 'GET' })
            .toPromise()
            .then(function (response: any) {
                return response.json();
            })

    }
    /*Set blurbsArray*/
    public setBlurb(data:any) {
        var s = data.dataArray;
        var bArray = [];
        for (let i in s) {
            var currentData = new MyModel();
            currentData.isShareableToFacebook = s[i].isShareableToFacebook;
            currentData.author = s[i].author;
            currentData.publishedDate = s[i].publishedDate;
            currentData.contentSourceType = s[i].contentSourceType;
            currentData.bookMarked = s[i].bookMarked;


             this.modelArray.push(currentData);//THE PROBLEM CODE
        }


    }
    /*return blurbsArray*/
    public getBlurb() {
        return this.modelArray;
    }

    public checkIsPostedToSocial(provider: any, socialData: any) {
        var providerFound = false;

        for (let i in socialData) {
            if (socialData[i].provider == provider) {
                providerFound = true;
                if (socialData[i].posted) {
                    return true;

                }
                else {
                    return false;
                }

            }
        }

        if (!providerFound) {
            return false;
        }
        return true;
    }

    public checkIsScheduledToSocial(provider: any, socialData: any) {
        var providerFound = false;
        console.log(socialData);

        for (let i in socialData) {
            if (socialData[i].provider == provider) {
                providerFound = true;
                if (!socialData[i].posted) {
                    return true;

                }
                else {
                    return false;
                }

            }
        }

        if (!providerFound) {
            return false;
        }
        return true;
    }





}

虽然我能够将数组分配给此模型数组,如下所示

this.modelArray = bArray;

但无法推动。

如果方法是否正确,请指导 感谢

1 个答案:

答案 0 :(得分:5)

我想你得到了

  

无法读取未定义的属性推送

您尚未初始化modelArray。它是currently未定义的,您尝试在push上调用函数undefined。使用this.modelArray = bArray它是有效的,因为您的bArray已初始化,并且引用已分配给引用就绪数组对象的modelArray

让它引用一个空数组(引用某些东西)。

modelArray: MyModel[] = [];