0

我对 AngularFire 聊天演示进行了相当多的修改。我被困在这一点上。我在用户登录时在 Firebase 上创建了一个数组,就像这样......

var url2 = 'https://<yoursite>.firebaseio.com/users';
$scope.$on("angularFireAuth:login", function(){
    $scope.loggedIn.add({newUser: $scope.user.username});
    });
$scope.loggedIn = angularFireCollection(new Firebase(url2).limit(50));

而对于 html...

<ul>
   <li ng-repeat="x in loggedIn | unique:'newUser' ">{{x.newUser }}</li>
</ul>

由于重复的每个项目都不是链接,并且 li 的每一行都没有按钮,(无论如何这都不好)似乎唯一可行的方法是挂钩到 $scope.$on(" angularFireAuth:logout", function() {}; 我遇到的问题是将登录的特定用户传递给此函数,以便我可以拼接该索引。

此外,由于该列表是从 Firebase 填充的,因此 splice 似乎必须一直到 Firebase 并删除该索引。有任何想法吗?

4

1 回答 1

0

使用对象而不是数组可能会更好,并且使用angularFire隐式服务来执行此操作。

你的用户名是唯一的吗?如果是这样,您可以执行以下操作:

$scope.loggedIn = {};
angularFire(new Firebase(url), $scope, 'loggedIn');
$scope.$on('angularFireAuth:login', function() {
  $scope.currentUser = $scope.user.username;
  $scope.loggedIn[$scope.currentUser] = true;
});
$scope.$on('angularFireAuth:logout', function() {
  delete $scope.loggedIn[$scope.currentUser];
});

否则,您可以使用 ref.push().name() 为每个用户生成唯一 ID(并且仍然使用 angularFire 绑定对象):

$scope.loggedIn = {};
angularFire(new Firebase(url), $scope, 'loggedIn');
$scope.$on('angularFireAuth:login', function() {
  $scope.currentUser = new Firebase(url).push().name();
  $scope.loggedIn[$scope.currentUser] = true;
});
$scope.$on('angularFireAuth:logout', function() {
  delete $scope.loggedIn[$scope.currentUser];
});
于 2013-10-02T19:53:18.227 回答