答案是您根本不必使用 angularFireCollection。您可以直接使用 Firebase 方法。您还可以使用 angularFire 或 angularFireCollection 将数据同步到您的客户端,然后直接使用 Firebase 方法推送数据。
angularFire 和 angularFireCollection 不是 Firebase 的替代品,而是包装器,旨在抽象出将数据同步到 Angular 绑定的一些复杂性。要了解这些复杂性是什么,您可以简单地查看angularFireCollection 代码,并查看必须处理的案例数量。
考虑以下示例:
<h1>Hello {{user.name}}</h1>
<input ng-model="user.name" ng-change="change()" />
没有角火:
function($scope) {
$scope.user = {};
$scope.change = function() {
new Firebase('URL/users/kato/name').set($scope.user.name);
};
new firebase('URL/users/kato').on('value', function(snap) {
$scope.user = snap.val()||{};
});
}
使用 angularFire:
function($scope, angularFire) {
angularFire(new Firebase('URL/users/kato'), $scope, 'user');
}
或者,更复杂的东西:
<ul>
<li ng-repeat="user in users">
{{user.name}}
<input ng-model="user.name" ng-change="change(user)" />
</li>
</ul>
如果没有 angularFireCollection,这将是 100 多行代码(即大约angularFireCollection 对象的长度),因为它需要处理 child_added、child_removed、child_changed 和 child_moved 事件,将它们添加到有序数组中以供 Angular 使用,查找键每次更改和修改或拼接,甚至可能移动数组中的记录。它还需要在客户端上添加更改,并通过为每条记录找到正确的密钥将它们同步回 Firebase。
使用 angularFireCollection,只需几行即可完成,如下所示:
function($scope, angularFireCollection) {
$scope.users = angularFireCollection(new Firebase('URL/users/kato'));
$scope.change = function(user) {
$scope.users.update(user);
};
}
当然,这些抽象并没有涵盖所有用例,而且肯定有很多地方直接使用 Firebase 既实用又合适。
希望有帮助。