2016-08-06 8 views
0

ng-hideディレクティブを使用してログインしたユーザーに基づいて、いくつかのナビゲーション項目を非表示にする必要があります。スコープ関数の外で定義されたスコープ変数にディレクティブを設定すると、それは機能します。しかし、それが関数の中で設定されている場合、それはしません。以下は私のコードです。どのように私はこれを達成することができるかについて誰か助言することができます。スコープ変数がスコープ内に設定されているとng-hideが機能しません

//私のコントローラコード$スコープ変数が関数内で定義されている

ub.controller('signupController',['$scope','$log','$http','authFact',function($scope,$log,$http,authFact){ 
    console.log('we are inside signup controller'); 

    $scope.fblogin =function(){ 
    FB.login(function(response){ 

     if (response.status === 'connected') { 
      // Logged into your app and Facebook. 
      $scope.testAPI(); 
     } else if (response.status === 'not_authorized') { 
      // The person is logged into Facebook, but not your app. 
      document.getElementById('status').innerHTML = 'Please log ' + 
      'into this app.'; 
     } else { 
      // The person is not logged into Facebook, so we're not sure if 
      // they are logged into this app or not. 
      document.getElementById('status').innerHTML = 'Please log ' + 
      'into Facebook.'; 
     } 
     $scope.fbresponse = response; 
    }); 

    }; 

    $scope.testAPI =function() { 
     FB.api('/me',{fields: 'first_name,last_name,gender,email,picture'}, function(response) { 

      console.log('Successful login for: ' + response.first_name); 
      console.log('email:' + (response.email)); 
      document.getElementById('status').innerHTML = 
      'Thanks for logging in, ' + response.first_name + '!'; 
      document.getElementById('profpic').innerHTML = 
      "<img src='" + response.picture.data.url + "'>"; 
     }); 
     $scope.accesstoken = FB.getAuthResponse().accessToken; 

     //does not work when defined here 
     $scope.test=true; 
     }; 

    $scope.test=true;//works when its defined here 

}]); 

//My view 
<div class="collapse navbar-collapse" id="navbar" ng-controller="signupController"> 
       <ul class="nav navbar-nav navbar-right">     

        <li ng-hide="test"> 
         <a class="page-scroll" href="#/signup">Register/Login</a> 
        </li> 
        </ul> 
      </div> 

答えて

0

、それは関数が呼び出されるだけ$スコープ(または初期化)に取り付けられています。

あなたの場合、関数は$scope.testApi()です。これは、あなたのresponse.status =がfacebookの応答から接続されている場合にのみ呼び出されます。何をすべきことはは、それはあなたの$ scope.testApi()関数内で値だ最初

関数の外で$ scope.test = trueまたはfalseの値を初期化しても更新されます。このように:

// Initialize the variable test outside the function 
$scope.test=true; 

$scope.testAPI =function() { 
    FB.api('/me',{fields: 'first_name,last_name,gender,email,picture'}, function(response) { 

     console.log('Successful login for: ' + response.first_name); 
     console.log('email:' + (response.email)); 
     document.getElementById('status').innerHTML = 
     'Thanks for logging in, ' + response.first_name + '!'; 
     document.getElementById('profpic').innerHTML = 
     "<img src='" + response.picture.data.url + "'>"; 
    }); 
    $scope.accesstoken = FB.getAuthResponse().accessToken; 

    // Update the value 
    $scope.test=true; 
}; 
+0

試してみてください。それは動作しません。 console.logテスト変数が "true"と表示されますが、ビューがそれを受け取らない場合 –

+0

ビューはそれを受け取らないということをどのように意味しますか? ng-hideを使用しているので、testの値がtrueの場合、リスト要素は表示されません。 –

+0

ビューにはまだ要素が表示され、属性値はng-hide = "isAuth"と表示され、クラスは割り当てられていません。私は自分のコード全体を共有したいと思っていますが、fb sdkをfiddleで初期化する方法はわかりません。私のコードを他にどのように共有できるか教えてください。この点について助けてください –

関連する問題