17

Im seguente this tutorial. Sulla strada per ottenere l'elenco di utenti da api.github Im ottenendo errore:Angolare: impossibile trovare un oggetto di supporto diverso '[oggetto oggetto]'

Cannot find a differ supporting object '[object Object]'

penso che la sua correlate a

<ul> 
<li *ngFor = "#user of users"> 
{{user | json}} 
</li> 
</ul> 

Nel mio codice perché prima non c'era alcun errore, e im sicuro se i dati provengono da richiesta gET, semplicemente cliccando non ha ancora dare alcun errore, qui è il mio codice finora

@Component({ 
selector: 'router', 
pipes : [], 

template: ` 
<div> 
<form [ngFormModel] = "searchform"> 
     <input type = 'text' [ngFormControl]= 'input1'/> 
</form> 
    <button (click) = "getusers()">Submit</button> 
</div> 
<div> 
<ul> 
    <li *ngFor = "#user of users"> 
    {{user | json}} 
    </li> 
</ul> 
</div> 
<router-outlet></router-outlet> 
`, 
directives: [FORM_DIRECTIVES] 
}) 
export class router { 
searchform: ControlGroup; 
users: Array<Object>[]; 
input1: AbstractControl; 

constructor(public http: Http, fb: FormBuilder) { 
    this.searchform = fb.group({ 
     'input1': [''] 
    }) 
    this.input1 = this.searchform.controls['input1'] 
} 
getusers() { 
    this.http.get(`https://api.github.com/ 
search/users?q=${this.input1.value}`) 
     .map(response => response.json()) 
     .subscribe(
     data => this.users = data, 
     error => console.log(error) 
     ) 
} 
} 
bootstrap(router, [HTTP_PROVIDERS]) 

risposta

21

penso che l'oggetto che hai ricevuto nel payload risposta non è un array. Forse la matrice che vuoi ripetere è contenuta in un attributo. Si dovrebbe controllare la struttura dei dati ricevuti ...

si potrebbe provare qualcosa di simile:

getusers() { 
    this.http.get(`https://api.github.com/search/users?q=${this.input1.value}`) 
    .map(response => response.json().items) // <------ 
    .subscribe(
     data => this.users = data, 
     error => console.log(error) 
    ); 
} 

Modifica

In seguito al doc Github (developer.github.com/v3/ Ricerca/# search-utenti), il formato della risposta è:

{ 
    "total_count": 12, 
    "incomplete_results": false, 
    "items": [ 
    { 
     "login": "mojombo", 
     "id": 1, 
     (...) 
     "type": "User", 
     "score": 105.47857 
    } 
    ] 
} 

Quindi l'elenco degli utenti è contenuta nella items campo e si dovrebbe usare questo:

getusers() { 
    this.http.get(`https://api.github.com/search/users?q=${this.input1.value}`) 
    .map(response => response.json().items) // <------ 
    .subscribe(
     data => this.users = data, 
     error => console.log(error) 
    ); 
} 
+0

facendo questo errore non ha ancora spettacolo anche senza utente visualizzato, console.log è vuota – blackHawk

+0

anche perché è che è successo, e come funziona .users – blackHawk

+0

Devi usare 'items'. Vedere questo documento: https://developer.github.com/v3/search/#search-users per il formato del payload della risposta. Ciò corrisponde all'array di utenti nel payload della risposta ... Ho aggiornato la mia risposta –

1

ho ricevuto questo errore nel mio codice, perché non piacerebbe correre JSON.parse (risultato).

Quindi il mio risultato era una stringa anziché una matrice di oggetti.

vale a dire che ho ottenuto:

"[{},{}]" 

invece di:

[{},{}] 

import { Storage } from '@ionic/storage'; 
... 
private static readonly SERVER = 'server'; 
... 
getStorage(): Promise { 
    return this.storage.get(LoginService.SERVER); 
} 
... 
this.getStorage() 
    .then((value) => { 
    let servers: Server[] = JSON.parse(value) as Server[]; 
        } 
); 
Problemi correlati