2015-01-26 3 views
0

질문 안녕하세요 Facebook이 초기화 될 때까지 기다려야하는 stateProvider를 원합니다. 그런 다음 내 컨트롤러에 $window.FB var을 할당해야합니다. How to detect when facebook's FB.init is completeFB 초기화 후 Window.FB를 해결합니다.

App.js

module.config(['$urlRouterProvider', '$stateProvider' ,function($urlRouterProvider, $stateProvider) { 
$stateProvider 
    .state('share',{ 
     url:'/share', 
     templateUrl:'modules/Share/Share.html', 
     controller: 'ShareCtrl', 
     controllerAs:'shareCtrl', 
     data: { 
     auth: "LoggedIn" 
     }, 
     resolve: { 
     FB: ['$window', function($window){ 
      return $window.FB.getUserID(function(response){ 
      return 'test'; 
      // return $window.FB; 
      });  
     }] 
     } 
    }); 
}]); 

...

내 페이스 북 초기화 기능

module.run(['$rootScope', '$state', 'authUserService', '$FB', function($rootScope, $state, authUserService, $FB) { 
    $FB.init('475092975961783', './Modules/Social/FB-Channel.html'); 

}]); 
은 기본적으로 동일 입니다 :

나는 오리엔테이션으로이 방법을했다 여기에 : https://github.com/djds4rce/angular-socialshare/blob/master/angular-socialshare.js 게다가 나는 channel.html에 대한 URL을 전달합니다. (더 이상 필요하지 않은 것 같아요, Is channelUrl parameter for Facebook init() deprecated?).

컨트롤러

module.controller('ShareCtrl', ['$scope', 'myFacebookService', 'FB', function($scope, myFacebookService, FB) { 
    this.rootUrl = 'modules/Share/'; 
    console.log(FB); 
    // console.log(myFacebookService.getUser(FB)); 
}]); 

변수가 해결 결코 극복하고 뷰는 결코로드되지됩니다. 브라우저 콘솔의 window.FB.getUserID()이 내 FacebookAppID를 반환합니다.

답변

0

트릭은 라이브러리를 수정하고 약속을 추가하는 것입니다. 문제가 해결 될 때 객체 :

angular.module('af.angular-socialshare', []) 
.factory('$FB',['$window', '$q', function($window, $q){ 
    // data stored here exists only once per app 
    var loaded = $q.defer(); 

    return { 
    init: function(fbId, channelUrl){ 
     if(fbId){ 
     this.fbId = fbId; 
     $window.fbAsyncInit = function() { 
      FB.init({ 
      appId: fbId, 
      channelUrl: channelUrl, 
      status: true, 
      xfbml: true 
      }); 
      loaded.resolve($window.FB); 
     }; 
     (function(d){ 
      var js, 
      id = 'facebook-jssdk', 
      ref = d.getElementsByTagName('script')[0]; 
      if (d.getElementById(id)) { 
      return; 
      } 

      js = d.createElement('script'); 
      js.id = id; 
      js.async = true; 
      js.src = "//connect.facebook.net/en_US/all.js"; 

      ref.parentNode.insertBefore(js, ref); 

     }(document)); 
     } 
     else{ 
     throw("FB App Id Cannot be blank"); 
     } 
    }, 
    getFB: function(){ 
     return loaded.promise; 
    } 

    }; 

}]) 

를로드 한 후 FB 개체

$stateProvider 
    .state('share',{ 
     url:'/share', 
     templateUrl:'modules/Share/Share.html', 
     controller: 'ShareCtrl', 
     controllerAs:'shareCtrl', 
     data: { 
     auth: "LoggedIn" 
     } 
     , 
     resolve: { 
     FB: ['$FB', function($FB){ 
      return $FB.getFB(); 
     }] 
     } 
    }); 
에게 해결됩니다