2016-11-03 4 views
2

구성 요소 (fb.component.ts)에서 서비스의 기능 (auth.service.ts의 loginFb)을 호출하려고합니다. 나는 모든것을 가져 와서 서비스를 시작한 것으로 보인다. 여전히 'loginfb'정의되지 않은 오류가 발생합니다. 내 auth.service.ts : 내 fb.component.ts에서서비스의 Angular2 기능이 정의되지 않았습니다.

import { Injectable } from '@angular/core'; 
import { Headers, Http } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class AuthService { 

constructor(private http: Http) {} 

loginFb(uid, accessToken): boolean{ 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    let body = JSON.stringify({"uid":uid,"accessToken": accessToken}); 
    this.http.post('http://localhost:3002/signinfb',body,{headers:headers}) 
    .toPromise() 
    .then(response => { 
     localStorage.setItem('id_token', response.json().id_token); 
     return true; 
    }) 
    .catch(this.handleError); 
return false; 
} 

private handleError(error: any): Promise<any> { 
    console.error('An error occurred', error); 
    return Promise.reject(error.message || error); 
    } 
} 

:

import { Component, OnInit } from '@angular/core'; 
    import { Router } from "@angular/router"; 
    import { AuthService } from './auth.service'; 


    declare const FB:any; 

    @Component({ 
    selector: 'facebook-login', 
    providers: [AuthService], 
    template: ` 
    <div> 
     <button class="btn" (click)="onFacebookLoginClick()"> 
      Sign in with Facebook 
     </button> 
    </div> 
    `, 
    }) 

    export class FacebookLoginComponent implements OnInit{ 

    constructor(private authService: AuthService) { 
    } 
    ngOnInit() { 
     FB.init({ 
      appId  : '234244113643991', 
      cookie  : false, 
      xfbml  : true, 
      version : 'v2.7' 
     }); 
    } 

    statusChangeCallback(response) { 
     if (response.status === 'connected') { 
      let uid = response.authResponse.userID; 
      let accessToken = response.authResponse.accessToken; 
      // window.alert(uid+"|"+accessToken); 
      if (this.authService.loginFb(uid,accessToken)){ 
      window.alert("GOOD!"); 
      }else{ 

      } 
     }else if (response.status === 'not_authorized') { 

     }else { 

     } 
    } 

    onFacebookLoginClick() { 
     FB.login(this.statusChangeCallback, 
     {scope: 'public_profile,email,user_friends,'}); 
    } 
    } 

을 나는 점점 오전 :

Subscriber.ts:241 Uncaught TypeError: Cannot read property 'loginFb' of undefined(…) 

누군가가이 문제를 좀 도와 줄래? 감사!

답변

1

당신은 일

statusChangeCallback = (response) => { 
+0

당신을 감사 화살표 기능을 statusChangeCallbackstatusChangeCallback

FB.login(this.statusChangeCallback.bind(this), 

에 적절한 컨텍스트에 this를 결합하거나 할 필요가! –

관련 문제