我很困惑为什么我们必须使用angularFireCollection
内置方法,例如add() update() remove()
等,而不是直接使用firebase js api。
因为我们只想用fireJS绑定firebase节点。我们可以使用
angularFireCollection(nodeRef)
然后我们想要对绑定节点做些什么。
我们可以回到firebase js api并对节点做些什么。实施例
nodeRef.push() .update() .remove()
。
对我而言,这比使用angularFireCollection().methods()
更好。因为
angularFireCollection().add()
vs new Firebase().push()
答案 0 :(得分:0)
答案是你根本不必使用angularFireCollection。您可以直接使用Firebase方法。您还可以使用angularFire或angularFireCollection将数据同步到客户端,然后直接使用Firebase方法推送数据。
angularFire和angularFireCollection不是Firebase的替代品,而是用于将同步数据的一些复杂性抽象为Angular绑定的包装器。要了解这些复杂性是什么,您只需查看angularFireCollection code,并查看必须处理的案例数。
考虑以下示例:
<h1>Hello {{user.name}}</h1>
<input ng-model="user.name" ng-change="change()" />
没有angularFire:
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 object的长度),因为它需要处理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既实用又合适。
希望有所帮助。