2017-09-19 15 views
0

私はいくつかのデータを保存するモデルを持っています。 私は私のservice.Likeこの角度2のモデルの配列にデータをプッシュする方法

modelArray: MyModel[]; 

にそのモデルの配列を作成したが、私は配列にいくつかのデータをプッシュしようとすると、それは

が未定義

のプロパティプッシュを読み取ることができませんエラーで失敗します
this.modelArray.push(currentData);//THE PROBLEM CODE 

私はこれを行う正しい方法についてはわかりません。私は

this.modelArray = bArray; 

ではなくプッシュすることができ、以下のようなこのモデル配列に配列を割り当てることができるよけど

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; 
    } 





} 

私のサービスコードは次のようになります。

親切なアプローチが 正しいかどうかのおかげ

+0

エラーログは何ですか?このsetBlurbはどこにありますか –

答えて

5

であれば、私はあなたが

を得ると思う導くあなたのmodelArrayを初期化していない

未定義

のプロパティプッシュを読み取ることができません。 currentlyが未定義で、undefinedに関数pushを呼び出そうとしています。 this.modelArray = bArrayの場合、bArrayが初期化され、レディー配列オブジェクトを参照するmodelArrayに参照が割り当てられているために動作します。

空の配列(参照先)を参照するようにします。

modelArray: MyModel[] = []; 
+0

ありがとう!私は初期化するのを忘れた.. –

関連する問題