2017-10-01 1 views
0

Ich erstelle eine Seite nach Typ für eine Pokedex ionic App. Die meisten Pokemon haben 2 Arten und sind daher in einem Array namens "Typen" gespeichert. Ich gehe davon aus, dass ich das Array von Typen in den pokemon json Daten durchlaufen muss. Ich bin nicht sicher, wie oder wo ich sollteErstellen von Seiten nach Kategorien mit Objekten mit 2 oder mehr Kategorien

Pokemon Json Daten durch Schleife

[ 
    "Number": "001", 
    "Name": "Bulbasaur", 
    "Generation": "Generation I",   
    "Types": [ 
    "Grass", 
    "Poison" 
      ] 
    ] 

Wenn ich das Format der Typen Array ändern, dass der Typen Json Daten übereinstimmen, dann funktioniert es gut, aber ich Verliere den anderen Typ.

Typ Json Daten

[ 
{ 
    "Types": "Grass", 

}, 
{ 
    "Types": "Poison", 

}, 
] 

ByCategory Dienst

getPokemonByCategory(Types: string[]): Observable<IPokemon[]> { 

    console.log("getPokemonByCategory Service Called") 

    return this.getAllPokemon() 
     .map((pokemon: IPokemon[]) => pokemon.filter(p => p.Types === Types)) 
     .do(data => console.log("data object returned from http.get call:")) 
     .do(data => console.dir(data)) 
     //.do(data => console.table(data)) 
     .catch(this.handleError); 
} 

byType Komponente

import { NavController, NavParams } from 'ionic-angular'; 
import { Component, OnInit } from '@angular/core'; 



import { pokemonService } from '../../services/pokemon.service'; 
import { IPokemon } from '../../services/pokemon' 
import { pokemonDetails } from '../pokemonDetails/pokemonDetails' 

@Component({ 
    selector: 'page-ByType', 
    templateUrl: 'ByType.html', 
}) 
export class pokemonByType implements OnInit { 
errorMessage: string; 
pokemon: IPokemon[]; 
pokemonType: any; 


constructor(private _pokemonService: pokemonService, 
    private nav: NavController, 
    private navParams: NavParams) { 

} 

ngOnInit(): void { 
    console.log("ngOnInit function called! By Category"); 

    this.pokemonType = this.navParams.data; 
    console.log("Nav" + this.navParams.data) 

    this._pokemonService 
     .getPokemonByCategory(this.pokemonType.Types) 
     .subscribe(
     data => this.extractData(data), 
     error => this.errorMessage = <any>error, 
    ); 
} 

private extractData(data: any) { 

    console.log("extractData function called!"); 
    console.log("data:") 
    console.dir(data); 

    this.pokemon = data; 

} 

}

Antwort

0

Sie sollten eine Schleife durch alle Arten des pokemon und Scheck wenn das in dex des Pokemon innerhalb des Array types ist nicht -1.

Beispiel:

return this.getAllPokemon() 
.map((pokemon: IPokemon[]) => pokemon.filter((p) => { 
    p.Types.forEach((type) => { 
     return type === type; 
    }); 
})) 
.do(data => console.log("data object returned from http.get call:")) 
.do(data => console.dir(data)) 
//.do(data => console.table(data)) 
.catch(this.handleError); 
+0

Ich bin immer noch einen immer Array (0) vom console.dir (Daten) immer – Kyle