17

Im theo sau this tutorial. Trên đường để có được danh sách người dùng từ api.github Im nhận được lỗi:Góc: Không thể tìm thấy một đối tượng hỗ trợ khác nhau '[đối tượng đối tượng]'

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

Tôi nghĩ rằng nó có liên quan đến

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

Trong mã của tôi, vì trước khi nó không có bất kỳ lỗi, và im không chắc chắn nếu dữ liệu đến từ get yêu cầu, chỉ cần nhấp chuột didnt đưa ra bất cứ lỗi, đây là mã của tôi cho đến nay

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

Trả lời

21

tôi nghĩ rằng đối tượng bạn nhận được trong tải trọng trả lời của bạn không phải là một mảng. Có lẽ mảng bạn muốn lặp lại được chứa trong một thuộc tính. Bạn nên kiểm tra cấu trúc của dữ liệu nhận được ...

Bạn có thể thử một cái gì đó như thế:

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

Sửa

Sau khi doc Github (developer.github.com/v3/ search/# search-users), định dạng của phản hồi là:

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

Vì vậy, danh sách người dùng được chứa trong items lĩnh vực và bạn nên sử dụng này:

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

bằng cách làm lỗi didnt chương trình này cũng không có người dùng hiển thị, console.log trống – blackHawk

+0

cũng là lý do tại sao vui vẻ và cách người dùng làm việc – blackHawk

+0

Bạn sẽ sử dụng 'mục'. Xem tài liệu này: https://developer.github.com/v3/search/#search-users cho định dạng tải trọng phản hồi. Điều này tương ứng với mảng người dùng trong tải trọng trả lời ... Tôi đã cập nhật câu trả lời của mình –

1

tôi nhận được lỗi này trong mã của tôi bởi vì tôi muốn không chạy JSON.parse (kết quả).

Vì vậy, kết quả của tôi là một chuỗi thay vì một mảng đối tượng.

tức tôi nhận:

"[{},{}]" 

thay vì:

[{},{}] 

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[]; 
        } 
); 
Các vấn đề liên quan