AngularFire中的多个集合?

时间:2013-12-05 18:38:53

标签: angularjs firebase angularfire

AngularFire附带一个简单的chat example

angular.module('chat', ['firebase'])
  .controller('Chat', ['$scope', '$timeout', 'angularFireCollection',
    function($scope, $timeout, angularFireCollection) {
      var url = 'https://angularFire.firebaseio.com/chat';
      $scope.messages = angularFireCollection(new Firebase(url).limit(50));
      $scope.username = 'Guest' + Math.floor(Math.random()*101);
      $scope.addMessage = function() {
        $scope.messages.add({from: $scope.username, content: $scope.message});
        $scope.message = "";
      }
    }
  ])
  .directive('autoScroll', function($timeout) {
    return function(scope, elements, attrs) {
      scope.$watch("messages.length", function() {
        $timeout(function() {
          elements[0].scrollTop = elements[0].scrollHeight
        });
      });
    }
  });

如何修改集合以存储多个集合?

例如,它目前是一组消息。但是我们想要扩展它以包含一组消息和一组用户名吗?

我可以通过手动修改数据库直接执行此操作,但我似乎无法将数据恢复出来,因此我认为我在这里做了一些完全错误:

$scope.data = angularFireCollection(new Firebase(url));
$scope.messages = data.getByName('messages');  // undefined
$scope.users = data.getByName('users');        // undefined

1 个答案:

答案 0 :(得分:3)

在尝试从中获取数据之前,请务必等待angularFireCollection初始化(从Firebase服务器“下载”您的数据)。

$scope.data = angularFireCollection(new Firebase(url), onInit);
function onInit() {
  $scope.messages = data.getByName('messages');
  $scope.users = data.getByName('users');
}

然而,当触发onInit回调时,似乎没有触发$ digest。我打开了pull request。现在你可以在$ timeout中包装onInit的内容。