2013-10-23 61 views
1

我很困惑,为什么我们不得不使用angularFireCollection内置的方法,如add() update() remove()等,而不是直接使用firebase js api。使用angularfire与纯粹的firebase js连接

因为我们只是想用angularJS绑定firebase节点。如果我们想要对绑定节点进行操作,我们可以使用 angularFireCollection(nodeRef)

我们可以回到firebase js api并对节点进行一些操作。示例

nodeRef.push() .update() .remove()

对我而言,这比使用angularFireCollection().methods()更好。由于

  • angularCollection未完成比较火力JS API
  • 我没有学/知道ngFire AGAIN是如何工作的,因为我在alredy火力
  • 不同的方法名了解到困惑我。 angularFireCollection().add() vs new Firebase().push()

回答

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); 
    }; 
} 

当然,这些抽象不包括每个用例当然也有很多地方,使用火力地堡是直接既实用又合适。

希望有所帮助。

+0

这真的有帮助,谢谢 – vzhen