2017-02-10 13 views
1

私はangularjsとfirebaseの専門家ではありませんが、私はこの短いコードを作ったので、なぜ動作しませんか解決できません。AngularJS + Firebase ng-showは動作しません

ユーザーがログインしているかどうか(firebase認証あり)、ユーザーがログインしているかどうかテストする必要があります。私は 'div'要素を表示します。ユーザーがログインしていない場合は、「div」を非表示にしてください。

私のhtmlコードはこのようになります。

<body ng-app="myApp" ng-controller="myCtrl"> 
    <div class="memberonly" ng-show="loggedIn"> 
     <h1>This is visible only for logged in user.</h1> 
    </div> 
<body> 

、スクリプトはここにある:コンソールで

<script> 
var app = angular.module('myApp', ['ngRoute']); 

app.controller('myCtrl', function($scope) { 
    firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // User is signed in. 
    console.log('user logged in.'); 
    $scope.email = user.email; 
    console.log($scope.email); 
    $scope.loggedIn = true; 
    console.log('$scope.loggedIn: ', $scope.loggedIn); 
    } else { 
    // No user is signed in. 
    console.log('no user logged in.'); 
    $scope.loggedIn = false; 
    console.log('$scope.loggedIn: ', $scope.loggedIn); 
    } 
}); 
}); 
</script> 

私は正しい値が、それでもNG-ショーはない作品をして見ることができます。 私はユーザーがログインしているのを見て、私は彼の電子メールを参照して、loggedInが 'true'に設定されていることを確認します。 助けてもらえますか?

ありがとうございました。

+0

アプリでどこかに 'loggedIn'と呼ばれる' $のscope'変数を持っていますか? 'loggedIn'変数の名前を変更して、動作しているかどうか確認してください。 – Merlin

+0

いいえ、これはそれがある場所です。 –

答えて

0

$scope.loggedInに値を与えた後に$scope.$apply()を使用すると、動作するはずです。

+0

はい、あなたはまさに正しいです!今それは完璧に動作します! –

+0

ありがとうMohammad :-) –

0

は、以下のことを試してみてください。

if (user) { 
    // User is signed in. 
    console.log('user logged in.'); 
    $scope.email = user.email; 
    console.log($scope.email); 
    $scope.$apply(function() { 
     $scope.loggedIn = true; 
    }) 
    console.log('$scope.loggedIn: ', $scope.loggedIn); 
    } else { 
    // No user is signed in. 
    console.log('no user logged in.'); 
    $scope.$apply(function() { 
     $scope.loggedIn = false; 
    }) 
    console.log('$scope.loggedIn: ', $scope.loggedIn); 
    } 
+0

はい、これもおそらくうまくいくでしょう:-) ありがとうございます。 –

関連する問題