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
答案 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的内容。