2017-08-25 21 views
0

がモデルタイプに値Json配列、配列要素のいずれかにエラーがある場合は、それを無視して残りの有効な配列のためにpowerPlant配列を作成したいと思います!すべてのポインタ?活字体のマッピングは、私は次のサービスを持っている

EDIT:下のポストで述べたように、私は提案を試してみたと私はスクリーンショットに示すようにエラーを取得する実行します。

enter image description here

これはなぜでしょうか? PowerPlantがインターフェイスであると不平を言っています。新しいインスタンスを作成するときにプロパティの値を指定する必要がありますか?

+0

したがって、配列要素のいずれかにエラーがあるかどうかを検出しますか? –

+0

私は分かりません!どのように私はこれを行うことができるかについていくつかの指針で私を助けてください? – sparkr

+0

私はここで少し混乱しています。だから、配列要素の中にはエラーがあるものもありますが、何がエラーとみなされるのか分かりませんか?私は角度のないユーザーであるため、 'this.apiService.get(path).map()'の 'map'メソッドでコールバックを使用し、コールバック関数に渡された値を' powerPlants ';コールバック関数の中で 'console.log'を使って、すべての順序が正しいかどうかを調べることもできます。 –

答えて

1

あなたのAPIサービスがPowerPlantオブジェクトと見なすことができるオブジェクトの配列を返したとすると、ここではできることがあります。あなたのAPIサービスがジェネリックでない場合

powerPlants: PowerPlant[] = []; //initialize the array. 

allPowerPlants(onlyActive: boolean = false, page: number = 1): void { 
    const self = this; 
    const path = `$/powerPlants?onlyActive${onlyActive}&page${page}`; 
    this.apiService.get(path).subscribe(
     powerplants:any[] => { 
      powerplants.forEach(item=>{ 
       if(isPowerPlant(item)){ 
        // cast the item as PowerPlant 
        self.powerPlants.push(item as PowerPlant); 
       } 
      }); 
     }, 
     err=> { 
      // handle error 
     }); 
} 

// define the type guard 
isPowerPlant(item:any):item is PowerPlant { 
    // check for the required properties of PowerPlant here and return true/false. 
    // example: 
    return item["powerplantProp1"] && item["powerplantProp2"]; 
} 

また、あなたはget方法の代わりに、Observable<any>からObservable<PowerPlant[]>を返すように選択することができます。 これを行うには(res: Response) => res.json() as PowerPlant[]を使用できます。 しかし、これは入力目的にすぎません。

参考文献:

  1. https://scotch.io/tutorials/angular-2-http-requests-with-observables
  2. https://basarat.gitbooks.io/typescript/docs/types/typeGuard.html

この情報がお役に立てば幸いです。

+0

私はあなたの提案を試みたが、私はエラーがあるように見える!私は上記の投稿を編集しました! – sparkr

+0

@sparkr 'PowerPlant'がインターフェースの場合、' new'を使ってインスタンス化することはできません。その場合、 'self.powerPlants.push(PowerPlantとしての項目);'、または単に 'self.powerPlants.push(item);'でもかまいません。 –

+0

はい、PowerPlantは私の場合のインタフェースです。あなたはあなたのasnwerを更新できますか? – sparkr

関連する問題