【问题标题】:Understanding the AngularFire extend FirebaseArray example?了解 AngularFire 扩展 FirebaseArray 示例?
【发布时间】:2014-12-07 21:48:26
【问题描述】:

我一直在努力正确实现这一点,我以为我做到了,但根据示例我做错了。你如何在控制器中使用这个工厂?预期的结果是什么?

例子:

app.factory("ListWithTotal", ["$FirebaseArray", "$firebase", function($FirebaseArray, $firebase) {
  // create a new factory based on $FirebaseArray
  var TotalFactory = $FirebaseArray.$extendFactory({
    getTotal: function() {
      var total = 0;
      // the array data is located in this.$list
      angular.forEach(this.$list, function(rec) {
        total += rec.amount;
      });
      return total;
    }
  });
  return function(listRef) {
    // override the factory used by $firebase
    **// why do listRef and ref not match here?
    //where does listRef or ref come from**
    var sync = $firebase(ref, {arrayFactory: TotalFactory});
    return sync.$asArray(); // this will be an instance of TotalFactory
  }
}]);

我已经能够使用不包括返回对新 Firebase 的引用的扩展工厂版本。例如:一个保持计数的待办事项列表:http://plnkr.co/edit/iAGvPHFWn2GSPGzBRpKh?p=preview

【问题讨论】:

  • 这是一个错字。它们都应该是listRefref。不是一个和另一个。

标签: javascript angularjs firebase angularfire


【解决方案1】:

这是一个错字。它们都应该是listRefref。不是一个和另一个。

当 ListWithTotal 工厂返回一个函数时,您可以像这样在控制器中使用它:

.controller('MyController', function ($scope, $window, ListWithTotal) {
    var ref = new $window.Firebase("//some-url/data");
    $scope.listWithTotal = ListWithTotal(ref);
});

【讨论】:

  • 酷,所以它取代了 $firebase 函数。那里需要 $window 吗?我通常只写 var ref = new Firebase('/path-to-firebase');
  • 由于 $window 是 Angular 对窗口对象的包装,因此全局对象的任何属性(如 Firebase)也可以在 $window 上使用。拥有您的代码参考 $window 可以让您轻松地在测试中从全局范围模拟事物。
猜你喜欢
  • 2018-03-08
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多