【问题标题】:forEach in angularforEach 角度
【发布时间】:2017-07-29 04:39:45
【问题描述】:

我在 api 中有一个 POST 方法,我想过滤返回并放入两个不同的数组中。如果 FLG_Alerta 为 0,则放入数组 1,如果 FLG_ALERTA 为 1,则放入数组 2。这是我的方法,也是我尝试使用的 forEach,但它不起作用。

vm.filtrarInc = function (Id_Fechamento) {

            id_fechamento = Id_Fechamento;
            $scope.$parent.vm.loading = $http({
                method: 'POST',
                async: false,
                url: _obterUrlAPI() + "AcompanhamentoSilt/FiltroSiltInc",
                dataType: "jsonp",
                params: {
                    Id_Fechamento: Id_Fechamento
                }

            }).then(function successCallback(response) {
                debugger;
                var i = 0;
                var o = 0;
                appModule.forEach(response.data, function (filtro, index) {
                    if (filtro.FLG_ALERTA == 1) {
                        vm.importacaoSiltInc[i] = filtro;
                        i++;
                    } else {
                        vm.importacaoSiltAlt[o] = filtro;
                        o++;
                    }
                });
                //vm.importacaoSiltInc = response.data;
                //vm.importacaoSiltAlt = response.data;
            }, function errorCallback(response) {
                MessageBox("Erro", response.data.Message);
            });

【问题讨论】:

  • 将 appModule 替换为 angular: angular.forEach ....
  • "但是不行" --> 怎么不行?您收到错误消息吗?预期结果与实际结果有何不同?请详细说明!
  • 当它进入 angular.forEach(response.data, function (filtro, index) 我有一个错误重定向到响应消息。
  • 我把appModule改成angular,错误和上面一样。
  • "和上面的错误一样"。您没有在上面指定任何错误,只是“它不起作用”并且您“有错误”。您需要提供更多信息,以便用户能够为您提供帮助。

标签: javascript angularjs arrays


【解决方案1】:

在您的代码中,您调用的是 appModule.forEach 而不是 angular.forEach

【讨论】:

  • 我改变了,错误还在继续。当它进入 angular.forEach(response.data, function (filtro, index) 我有一个错误重定向到响应消息
【解决方案2】:

最好使用javascript的原生map。而且您还使用对象作为数组。

重写你的函数会更像这样:

            id_fechamento = Id_Fechamento;
            $scope.$parent.vm.loading = $http({
                method: 'POST',
                async: false,
                url: _obterUrlAPI() + "AcompanhamentoSilt/FiltroSiltInc",
                dataType: "jsonp",
                params: {
                    Id_Fechamento: Id_Fechamento
                }

            }).then(function successCallback(response) {
                debugger;
                vm.importacaoSiltInc = [];
                vm.importacaoSiltAlt= [];

                response.data.map(function (item, i) {
                    if (item.FLG_ALERTA == 1) {
                        vm.importacaoSiltInc.push(item);
                    } else {
                        vm.importacaoSiltAlt.push(item);
                    }
                });
                //vm.importacaoSiltInc = response.data;
                //vm.importacaoSiltAlt = response.data;
            }, function errorCallback(response) {
                MessageBox("Erro", response.data.Message);
            });

提示:我知道这不是被问到的,但我认为警告你代码中同样的错误做法是件好事。

  • $scope.$parent.vm.loading:这样做不是很酷,如果您需要在应用程序的任何位置访问相同的对象,您可以执行 service as singleton
  • 您将对象用作数组(我对其进行了重构)。

【讨论】:

    【解决方案3】:

    我用你的提示解决了这个问题。这是我的工作代码。

     vm.filtrarInc = function (Id_Fechamento) {
    
                id_fechamento = Id_Fechamento;
                $scope.$parent.vm.loading = $http({
                        method: 'POST',
                        async: false,
                        url: _obterUrlAPI() + "AcompanhamentoSilt/FiltroSiltInc",
                        dataType: "jsonp",
                        params: {
                            Id_Fechamento: Id_Fechamento
                        }
    
                    })
                    .then(function successCallback(response) {
                            vm.importacaoResultado = response.data;
                            angular.forEach(vm.importacaoResultado,
                                function(filtro, index) {
                                    if (filtro.FLG_ALERTA == true) {
                                        vm.importacaoSiltInc.push(filtro);
                                    } else {
                                        vm.importacaoSiltAlt.push(filtro);
                                    }
                                });
    
                        },
                        function errorCallback(response) {
                            MessageBox("Erro", response.data.Message);
                        });
    
            };
    

    【讨论】:

      【解决方案4】:

      我认为你在错误的目标上调用了 forEach() 函数。

      试试:

      angular.forEach(....

      或:

      response.data.forEach(function(filtro, index) {
                      if (filtro.FLG_ALERTA == 1) {
                          vm.importacaoSiltInc[i] = filtro;
                          i++;
                      } else {
                          vm.importacaoSiltAlt[o] = filtro;
                          o++;
                      }
      });
      

      【讨论】:

      • 这是 ES5 的 Array.prototype.forEach,而不是 angular.forEach
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多