[Angular2 + Facebook Graph API]:找不到类型 'object' 的不同支持对象“[object Object]”
[Angular2 + Facebook Graph API]: Cannot find a differ supporting object '[object Object]' of type 'object'
我正在尝试创建一个服务来调用 Angular 中的 Facebook Graph API 2.
也许,我做错了什么,因为我无法让它工作。
错误:
找不到类型 'object' 的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组。
这是我的代码:
服务
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/Rx';
let URL = 'https://graph.facebook.com/me';
@Injectable()
export class FacebookService {
constructor (private http:Http) {
this.http = http;
}
getInfo(accessToken: string) {
return this.http.get(URL + '?access_token=' + accessToken)
.map(res => res.json())
.catch(this.handleError);
}
handleError(error) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
分量:
import { Component, OnInit } from '@angular/core';
import { Routes, Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS} from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/Rx';
import { AboutComponent } from './+about';
import { HelpComponent } from './help';
import { FacebookService } from './facebook.service';
@Component({
moduleId: module.id,
selector: 'leaddockets-app',
templateUrl: 'leaddockets.component.html',
styleUrls: ['leaddockets.component.css'],
directives: [ROUTER_DIRECTIVES],
providers: [ROUTER_PROVIDERS, FacebookService]
})
@Routes([
{path: '/about', component: AboutComponent},
{path: '/help', component: HelpComponent}
])
export class LeaddocketsAppComponent implements OnInit {
title = 'leaddockets works!';
info:Observable < Array<Object> >;
constructor(private fbService:FacebookService) {
this.info = this.fbService.getInfo( facebook.accessToken );
}
}
模板:
<ul *ngFor="let obj of info | async">
<li class="text">
{{obj.$value}}
</li>
</ul>
我做错了什么?
谢谢。
您需要在 return 之前提取数据。我的代码是 return 承诺编辑的,但概念是一样的。
getFacebookFriends() {
return this.http.get('https://graph.facebook.com/me/invitable_friends access_token=' + YOUR_TOKEN)
.toPromise()
.then(this.extractData);
}
private extractData(res) {
let body = res.json();
return body.data || {};
}
我正在尝试创建一个服务来调用 Angular 中的 Facebook Graph API 2.
也许,我做错了什么,因为我无法让它工作。
错误: 找不到类型 'object' 的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组。
这是我的代码:
服务
import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/Rx'; let URL = 'https://graph.facebook.com/me'; @Injectable() export class FacebookService { constructor (private http:Http) { this.http = http; } getInfo(accessToken: string) { return this.http.get(URL + '?access_token=' + accessToken) .map(res => res.json()) .catch(this.handleError); } handleError(error) { console.error(error); return Observable.throw(error.json().error || 'Server error'); } }
分量:
import { Component, OnInit } from '@angular/core'; import { Routes, Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS} from '@angular/router'; import { Observable } from 'rxjs/Observable'; import 'rxjs/Rx'; import { AboutComponent } from './+about'; import { HelpComponent } from './help'; import { FacebookService } from './facebook.service'; @Component({ moduleId: module.id, selector: 'leaddockets-app', templateUrl: 'leaddockets.component.html', styleUrls: ['leaddockets.component.css'], directives: [ROUTER_DIRECTIVES], providers: [ROUTER_PROVIDERS, FacebookService] }) @Routes([ {path: '/about', component: AboutComponent}, {path: '/help', component: HelpComponent} ]) export class LeaddocketsAppComponent implements OnInit { title = 'leaddockets works!'; info:Observable < Array<Object> >; constructor(private fbService:FacebookService) { this.info = this.fbService.getInfo( facebook.accessToken ); } }
模板:
<ul *ngFor="let obj of info | async"> <li class="text"> {{obj.$value}} </li> </ul>
我做错了什么?
谢谢。
您需要在 return 之前提取数据。我的代码是 return 承诺编辑的,但概念是一样的。
getFacebookFriends() {
return this.http.get('https://graph.facebook.com/me/invitable_friends access_token=' + YOUR_TOKEN)
.toPromise()
.then(this.extractData);
}
private extractData(res) {
let body = res.json();
return body.data || {};
}