javascript - Angular 2 在箭头函数中更新 var - Facebook

标签 javascript facebook typescript angular facebook-login

(对不起我的英语)

您好,我仍在使用 Angular 2 和 TypeScript 开发我的 Facebook 登录网站。之前有人帮我做箭头功能,现在我无法在屏幕上显示用户信息。
登录成功完成,this.user 收到用户数据,但该信息出现在屏幕上必须执行某些操作,例如,按下按钮(即使没有某些事件)。

代码(app.component.ts):

import {Component} from 'angular2/core';
import {Main} from './pages/main/main';

declare const FB: any;

@Component({
  selector: 'my-app',
  templateUrl: 'app/app.html',
  directives: [Main]
})
export class AppComponent implements OnInit { 

token: any;
loged: boolean = false;
window.user = { name: 'Hello' };

constructor() { }

statusChangeCallback(response: any) {
    if (response.status === 'connected')
        this.me();
    else
        this.login();
}

login() {
    FB.login((result: any) => {
        this.loged = true;
        this.token = result;
        this.me();
    }, { scope: 'user_friends' });
}

me() {
    FB.api('/me?fields=id,name,first_name,gender,picture.width(150).height(150),age_range,friends',
        (result: any) => {
            console.log(result);
            this.user = result;
        });
}

ngOnInit() {
    FB.getLoginStatus(response => {
        this.statusChangeCallback(response);
    });
}
}

我认为我的问题出在 me() 方法上。

代码(app/app.html):

<div class="navbar-header">
  <a class="navbar-brand" href="#">
    User name: {{user.name}}
  </a>
</div>

我是 Angulare 2 和 typescript 的初学者,所以我仍然遇到问题。谢谢。

最佳答案

我认为 FB 对象是在 Angular2 的上下文之外创建的,因此回调中的处理不会触发更改检测。

您需要利用 NgZone 类在 Angular2 区域中执行您的代码:

constructor(private ngZone:NgZone) {
}

me() {
  FB.api('/me?fields=id,name,first_name,gender,picture.width(150).height(150),age_range,friends',
    (result: any) => {
      console.log(result);
      this.ngZone.run(() => { // <-----
        this.user = result;
      });
    });
}

关于javascript - Angular 2 在箭头函数中更新 var - Facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825438/

相关文章:

javascript - 快照后打开网络摄像头

javascript - 设计跨平台多内容类型文件格式的最佳方式?

ios - 无法在 iOS 上获取 Facebook publish_action 权限

facebook - spring-security-facebook、s2-init-facebook 未生成默认 Dao

typescript 定义。什么时候类需要动态化?

javascript - 强制 Aurelia 使用相同组件但不同路由参数调用新路由的生命周期方法

typescript - 如何使用扩展语法将 TypeScript 类型添加到解构参数中?

javascript - W3C 标准中的 document.FORMNAME 是什么?

javascript - 回发后如何停止默认滚动?

iphone - 向 Facebook 和 Twitter iOS 5 和 6 的简单帖子