2014-09-28 189 views
1

我正在使用Facebook登錄我有困難正確設置$scope.user。它不會在回調中自動設置,而只會在頁面上點擊其他內容。我敢肯定這是簡單的我想念但可以使用一些幫助。角度範圍不更新

我的HTML

<nav class="navbar navbar-default navbar-fixed-top" 
    role="navigation" ng-controller="HomeCtrl"> 
     <p class="navbar-text pull-right"> 
     {{ user.name }} 
     </p> 
     <button 
     class="btn btn-default navbar-btn navbar-right" 
     ng-hide="user" 
     ng-click="login()">Log In With Facebook 
     </button> 
    </nav> 

HomeCtrl:

.controller('HomeCtrl', function($scope) { 
    $scope.user; 

    (function(d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) return; 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    $scope.login = function() { 
     FB.login(function(response) { 
     if (response.status === 'connected') { 
      FB.api('/me', function(response) { 
      console.log(response); 
      $scope.user = response; 
      }); 
     } 
     }, {scope: 'public_profile,email,user_friends'}); 
    } 
    }) 

如果我跑console.log($scope.user)後,我將它設置爲響應時,它好像$scope.user被設定,但是,它不會反映在HTML直到點擊另一個元素之後。

+3

這是衆多'$範圍的一個$適用()'相關的問題,我猜? – PSL 2014-09-28 16:41:02

+0

@PSL,是的。留下一個答案,我會接受,謝謝。 – user2954587 2014-09-28 16:42:52

回答

3

facebook登錄回調不是按角度執行的。所以角度無法知道它修改了範圍,並且它不得不重新評估HTML頁面中使用的表達式。

您因而需要告訴角的東西在範圍發生了變化:

 FB.api('/me', function(response) { 
     console.log(response); 
     $scope.$apply(function() { 
      $scope.user = response; 
     }); 
     });