2013-10-23 62 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