1

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

因为我们只想用 angularJS 绑定 firebase 节点。angularFireCollection(nodeRef)如果我们想对绑定节点做一些事情,我们可以使用 then。

我们可以回到 firebase js api 并使用节点做一些事情。例子

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

对我来说,这比使用angularFireCollection().methods(). 因为

  • 与firebase js api相比,angularCollection未完成
  • 我不必再学习/知道 ngFire 是如何工作的,因为我已经在 firebase 中学习过
  • 不同的方法名称让我感到困惑。angularFireCollection().add()对比new Firebase().push()
4

1 回答 1

0

答案是您根本不必使用 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 既实用又合适。

希望有帮助。

于 2013-10-23T15:26:25.097 回答