AngularFire $ firebasearray扩展动态计数 sum



正在尝试实现某些节点的动态计数:

这有效,但它不是动态的,您必须调用sum()。

app.factory("ArrayWithSum", function($firebaseArray) {
  return $firebaseArray.$extend({
    sum: function() {
       var total = 0;
       var todayDate = new Date();
       var start = todayDate.setHours(0,0,0,0);
       var end = todayDate.setHours(23,59,59,999);
        // the array data is located in this.$list
        angular.forEach(this.$list, function(rec) {
            if (angular.isDefined(rec.qa)){
                if (angular.isDefined(rec.qa.completed)) {
                    if (rec.qa.completed >= start && rec.qa.completed <= end){
                        total++;
                    }
                }
            }
        });
        return total;
    }
  });
});

我尝试了$$更新,但无法在数组中访问this_counter:

  app.factory("counter", function($firebaseArray) {
      return $firebaseArray.$extend({
        sum: function() {
            return this._counter;
        },
        $$updated: function(){
           var changed = $firebaseArray.prototype.$$updated.apply(this, arguments);
           var todayDate = new Date();
           var start = todayDate.setHours(0,0,0,0);
           var end = todayDate.setHours(23,59,59,999);
           if( !this._counter ) { 
               this._counter = 0; 
           }
            // the array data is located in this.$list
            angular.forEach(this.$list, function(rec) {
                if (angular.isDefined(rec.qa)){
                    if (angular.isDefined(rec.qa.completed)) {
                        if (rec.qa.completed >= start && rec.qa.completed <= end){
                            this._counter++;
                        }
                    }
                }
            });
          return changed;
        }
      });
    });

有人知道如何使我可以更新和访问的动态变量?

谢谢

让它与$ firebaseObject一起使用。显然,您可以将属性_counter添加到对象而不是数组中。无论如何,这是有效的,也是获得动态计数的好方法。

app.factory("counter", function($firebaseObject) {
  return $firebaseObject.$extend({
    $$updated: function(){
       var changed = $firebaseObject.prototype.$$updated.apply(this, arguments);
       if( !this._counter ) { this._counter = 0; }
       var total = 0;
       var todayDate = new Date();
       var start = todayDate.setHours(0,0,0,0);
       var end = todayDate.setHours(23,59,59,999);
        // the array data is located in this.$list
        angular.forEach(this, function(rec) {
            if (angular.isDefined(rec.qa)){
                if (angular.isDefined(rec.qa.completed)) {
                    if (rec.qa.completed >= start && rec.qa.completed <= end){
                        total++;
                    }
                }
            }
        });
      this._counter = total;
      return changed;
    }
  });
});

vm.panels = new counter(panelsRef);
{{vm.panels._counter}}

在IE11上长时间持续时间后,手表没有发射的问题。所以以为我会尝试这种方法。

最新更新