Estoy siguiendo este tutorial . En el camino para obtener la lista de usuarios de api.github, obtengo un error:
No se puede encontrar un objeto de soporte diferente '[objeto Objeto]'
Creo que está relacionado con
<ul> <li *ngFor = "#user of users"> {{user | json}} </li> </ul>En mi código porque antes no había ningún error, y no estoy seguro de si los datos provienen de la solicitud de obtención, solo hacer clic no dio ningún error, aquí está mi código hasta ahora
@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])Creo que el objeto que recibió en su carga útil de respuesta no es una matriz. Tal vez la matriz que desea iterar esté contenida en un atributo. Debería comprobar la estructura de los datos recibidos...
Podrías intentar algo así:
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) ); }Editar
Siguiendo el documento de Github (developer.github.com/v3/search/#search-users), el formato de la respuesta es:
{ "total_count": 12, "incomplete_results": false, "items": [ { "login": "mojombo", "id": 1, (...) "type": "User", "score": 105.47857 } ] } Entonces, la lista de usuarios está contenida en el campo de items y debe usar esto:
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) ); }Recibí este error en mi código porque no ejecuté JSON.parse(result) .
Entonces mi resultado fue una cadena en lugar de una matriz de objetos.
es decir, tengo:
"[{},{}]"en vez de:
[{},{}] 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[]; } );La falta de corchetes alrededor de la propiedad de entrada puede causar este error. Por ejemplo:
Component Foo { @Input() bars: BarType[]; }Correcto:
<app-foo [bars]="smth"></app-foo>
Incorrecto (error de activación):
<app-foo bars="smth"></app-foo>