当前位置: 代码迷 >> JavaScript >> 如何用Angular计算元素?
  详细解决方案

如何用Angular计算元素?

热度:112   发布时间:2023-06-13 12:12:11.0

我有一个全局控制器,我想在其中计算一些元素,因为之后我将在另一个html中进行作用域设置。

'use strict';

angular.module('MainApp')
    .factory('allInventoryFactory', function ($http, $q, myfactory) {
        var deferred = $q.defer();
        $http({
            method: 'GET',
            url: myfactory.URLOperation 
        }).success(function (data) {

            angular.forEach(data, function (datainventary) {
var active = 0;
                   var pending = 0;
                    var desactive = 0;
                    var vodafone = 0;
                var input = datainventary.sites;
                input.forEach(function (input) {

                    if (input.ActivationStatus == 'AC') {
                        console.log("AC");
                        active++;
                    }
                    else if (input.ActivationStatus == 'PA') {
                        console.log("PA");

                        pending++;
                    }
                    else if (input.ActivationStatus == 'DE') {
                        console.log("DE");

                        desactive++;
                    }
                    //Contracting mode is independent of the ActivationStatus
                    if (input.ContractingMode == '2') {
                        console.log("Vodafone");

                        vodafone++;
                    }

                });

            })

        }).error(function () {
            deferred.reject('There was an error')
        })
        return deferred.promise;
    });

每个计数器的全局结果为0 ,代码不会增加数字。 而且我不知道该如何继续。

您需要将计数变量的声明置于循环之外。 否则,将在每次循环时声明它们并将其初始化为0。

您在错误的范围/关闭中声明了计数器

}).success(function (data) {
  // declare these in the success
  var counters = { 'AC' : 0, 'PA': 0, 'DE': 0, 'Vodafone':0 }

  ...

  if (counters.hasOwnProperty(input.ActivationStatus)) {
    counters[input.ActivationStatus]++;
    console.log( input.ActivationStatus);
  }

  if (input.ContractingMode == '2') {
    console.log("Vodafone");
    counters.Vodafone++;
  }

您为什么不通过在承诺完成/成功时调用defer.resolve('...')来解决承诺? 您还应该在执行的全局范围内而不是在input.forEach迭代内部声明计数器变量。

另一种计算方法是

active = input.filter(function(i){
  return i.ActivationStatus == 'AC';
}).length;

在循环input.forEach之外声明计数变量。 每次他们重新初始化0值

  相关解决方案