使用angularFire与纯粹的firebase js结合

时间:2013-10-23 06:37:59

标签: firebase angularfire

我很困惑为什么我们必须使用angularFireCollection内置方法,例如add() update() remove()等,而不是直接使用firebase js api。

因为我们只想用fireJS绑定firebase节点。我们可以使用 angularFireCollection(nodeRef)然后我们想要对绑定节点做些什么。

我们可以回到firebase js api并对节点做些什么。实施例

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

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

  • 与firebase js api相比,angularCollection未完成
  • 我没有必要学习/了解ngFire的工作方式,因为我已经在firebase中学到了这些知识
  • 不同的方法让我感到困惑。 angularFireCollection().add() vs new Firebase().push()

1 个答案:

答案 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既实用又合适。

希望有所帮助。