Firebase 3路数据绑定无法按预期工作

时间:2014-03-08 08:38:08

标签: firebase angularfire

我有一个返回firebase引用的AngularJS服务。

.factory('sessionManager', ['$firebase','$scope', function($firebase){
    var ref=new Firebase('https://telechat.firebaseio.com/sessions');
    return $firebase(ref);
  }])

在控制器中,我添加了依赖项并调用了$bind

$scope.items=sessionManager;
$scope.items.$bind($scope,'sessions').then(function(unbind){
      unbind();
    });

但是当我将它打印到控制台时,除了数据数组之外,返回的数据还包含$add$set,...等函数的集合。

为什么会这样?我这样做是错误的吗?

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了这个问题,你可能会认为$ bind()是$ firebase对象到原始数据数组或对象的转换。实质上,$ firebase实例和$ bind之间的唯一区别是数据本地更改会自动从Angular推送回Firebase。然而,当你使用没有$ bind的$ firebase时,你需要调用$ save来推送本地更改。

请记住,$ firebase是Firebase API的包装器而不是简单的数据数组,在大多数情况下,您仍然可以将其视为原始数据。

要在Firebase对象中迭代数据,可以使用ngRepeat:

<li ng-repeat="(key, item) in $sessions">{{item|json}}</li>

或者,如果您想应用依赖于数组的过滤器:

<li ng-repeat="(key, item) in $sessions | orderByPriority | filter:searchText">

或者在使用$ getIndex:

的控制器中
angular.forEach($scope.sessions.$getIndex(), function(key) {
    console.log(key, $scope.sessions[key]);
});

$ add / $ update / etc方法是$firebase object's API的一部分。 documentationtutorial应该是了解此过程的绝佳引物。

这也是API的一部分,它继续发展以更好地匹配Angular的做事方式和来自用户的反馈。