javascript - Angularfire $firebaseArray 扩展动态计数\总和

标签 javascript angularjs arrays firebase angularfire

我正在尝试实现某个节点的动态计数(如果已定义):

这可以工作,但它不是动态的,你必须调用 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;
    }
  });
});

我尝试了 $$update 但无法访问数组中的 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}}

我遇到了 watch 在 IE11 上长时间运行后不触发的问题。所以我想尝试这种方法。

关于javascript - Angularfire $firebaseArray 扩展动态计数\总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46444972/

相关文章:

javascript - Rails3 UJS 更新未显示

javascript - 接收带有键入文本效果的即时 chatgpt 响应

node.js - 使用 Angular 将信息获取到 Jade 模板时出现问题

javascript - Angular添加功能回复评论

c++ - 在创建显示索引如何在另一个数组中移动的数组时遇到问题

arrays - pq: 函数 unnest(unknown) 不是唯一的

javascript - 从手机或计算机检测用户并在不同位置显示广告

javascript - 无法调用 setState(或 forceUpdate)

javascript - 使用 Angular 更新 json 值

php - 列表数组函数