如何将数据推送到angular2中的模型数组
how to push data to array of a model in angular2
我有一个模型来存储一些数据。
我在 service.Like this
中创建了该模型的数组
modelArray: MyModel[];
但是当我尝试将一些数据推送到数组时失败并出现错误
Cannot read property push of undefined
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;
但无法推送。
方法是否正确,请指导
谢谢
我想你明白了
Cannot read property push of undefined
您还没有初始化 modelArray
。它 currently
未定义,您尝试在 undefined
上调用函数 push
。使用 this.modelArray = bArray
它可以工作,因为你的 bArray
被初始化并且引用被分配给 modelArray
,它指的是一个准备好的数组对象。
让它引用一个空数组(引用某物)。
modelArray: MyModel[] = [];
我有一个模型来存储一些数据。 我在 service.Like this
中创建了该模型的数组modelArray: MyModel[];
但是当我尝试将一些数据推送到数组时失败并出现错误
Cannot read property push of undefined
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;
但无法推送。
方法是否正确,请指导 谢谢
我想你明白了
Cannot read property push of undefined
您还没有初始化 modelArray
。它 currently
未定义,您尝试在 undefined
上调用函数 push
。使用 this.modelArray = bArray
它可以工作,因为你的 bArray
被初始化并且引用被分配给 modelArray
,它指的是一个准备好的数组对象。
让它引用一个空数组(引用某物)。
modelArray: MyModel[] = [];