2014-11-26 4 views
0

Я создаю сайт как школьный проект, и я использую Angularjs с Firebase.firebase login google email

Я пытаюсь проверить, находится ли идентификатор пользователя в массиве, но он, похоже, не может правильно сравнивать строки.

Контроллер:

'use strict'; 

var AboutController = angular.module('AboutController', []); 

AboutController.factory('Auth', ['$firebaseAuth', function($firebaseAuth) { 
    var ref = new Firebase('https://MYURL.firebaseio.com/'); 
    return $firebaseAuth(ref); 
}]); 

AboutController.controller('AboutCtrl', function ($scope, $firebase, Auth) { 

    var usrRef = new Firebase('https://MYURL.firebaseio.com/Users'); 
    $scope.users = $firebase(usrRef).$asArray(); 

    $scope.auth = Auth; 
    $scope.account = $scope.auth.$getAuth(); 
    var id = $scope.account.google.id; 
    var check = false; 
    for(var user in $scope.users){ 
    if(user.UID === id){ 
     check = true; 
     break; 
    } 
    } 
    $scope.isUser = check; 
    if($scope.isUser !== true){ 
    $scope.users.$add({ 
     UID: $scope.account.google.id, 
    }); 
    } 
}); 

HTML-страница:

<div ng-controller="AboutCtrl"> 
    <div> 
    <h3>User Data</h3> 
    <p>{{account.google.id}}</p> 
    <pre>{{account|json}}</pre> 
    <p>User has logged in before:{{isUser}}</p> 
    <pre>{{users|json}}</pre> 
    <div> 
     <p>This compares the current UID's in the db to the current user's uid</p> 
     <div ng-repeat='usr in users'> 
     <p>{{usr.UID}} {{usr.UID == account.google.id}}</p> 
     </div> 
    </div> 
    </div> 
</div> 

Как вы можете увидеть страницу HTML делает то же самое сравнение как контроллер, но страницы HTML возвращает правильный ответ, тогда как контроллер не.

ответ

2

$ scope.account имеет значение null, если вы не прошли аутентификацию. Возможно, лучше использовать $ onAuth здесь.

$ onAuth(); Прослушивает изменения состояния аутентификации клиента. Предоставленный обратный вызов будет срабатывать при изменении состояния аутентификации клиента. Source

$ scope.users = $ firebase (usrRef). $ AsArray() является асинхронным. Когда вы зацикливаете над $ scope.user, в это время это может быть пустым. Вы должны подождать, пока данные не будут получены от Firebase. Проверьте $ loaded();

$ loaded(); Возвращает обещание, которое разрешается, когда исходные данные массива загружаются из Firebase. Обещание разрешается самому массиву. Source

+0

спасибо. Это было связано с проблемой. Другая проблема заключалась в том, что «user.UID» возвращался как неопределенный. –