17

Im folgenden this tutorial. Auf dem Weg dorthin Liste der Benutzer von api.github Im bekommen Fehler bekommen:Angular: Kann ein Objekt unterstützt nicht unterscheiden finden '[object Object]'

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

Ich denke, die im Zusammenhang mit

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

In meinem Code da, bevor es dort keine irgendeinen Fehler war, und im nicht sicher wenn Daten von GET-Anfrage kommen, klicken nur einen Fehler nur knapp sein Ziel zu geben, hier ist mein Code so weit

@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]) 

Antwort

21

ich denke, dass das Objekt, das Sie in Ihrer Antwort Nutzlast empfangen ist kein Array. Vielleicht ist das Array, das Sie durchlaufen wollen, in einem Attribut enthalten. Sie sollten die Struktur der empfangenen Daten prüfen ...

Sie so etwas versuchen könnte:

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

bearbeiten

Nach dem Github doc (developer.github.com/v3/ Suche/# search-Nutzer), das Format der Antwort ist:

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

So ist die Liste der Benutzer in dieenthalten istFeld, und Sie sollten diese verwenden:

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

durch diesen Fehler nur knapp sein Ziel zeigen dabei auch kein Benutzer angezeigt wird, ist console.log leer – blackHawk

+0

auch warum das passierte und wie .users arbeitete – blackHawk

+0

Sie sollten 'Elemente' verwenden. In diesem Dokument finden Sie unter https://developer.github.com/v3/search/#search-users das Format der Antwortnutzlast. Dies entspricht dem Array von Benutzern in der Antwort-Payload ... ich meine Antwort –

1

erhielt ich diesen Fehler in meinem Code, weil ich nicht JSON.parse (Ergebnis) laufen würde.

Also mein Ergebnis war eine Zeichenfolge anstelle eines Arrays von Objekten.

dh ich habe:

"[{},{}]" 

statt:

[{},{}] 

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[]; 
        } 
);