Фильтр Angularjs работает нормально, но выдает ошибки итерации

var app = angular.module('NGapp', []);
app.filter('altDate', altDate);
app.controller('MainCtrl', MainCtrl)

function MainCtrl($scope) {
  $scope.data = {
    'listProductCost': [{
      'data': 1
    }, {
      'data': 23
    }, {
      'data': 234
    }, ]
  }
}

function altDate(_) {
  return function(value) {
    console.log(value)
    if (!value || value.length === 0) {

      return [];
    } else {
      var f = []
      angular.forEach(value, function(data) {
        f.push(data['data']);
      })
      var s = []
      s.push({
        'min': _.min(f),
        'max': _.max(f)
      })
      return s;
    }

    //return s;
  };
}
app.factory('_', LodashFactory);

/** @ngInject */
function LodashFactory($window) {
  return $window._;
}
<!DOCTYPE html>
<html ng-app="NGapp">

<head>
  <meta charset="utf-8" />
  <title>AngularJS </title>

  <link rel="stylesheet" href="style.css" />
  <script data-require="lodash.js@4.17.4" data-semver="4.17.4" src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>
  <script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script>

  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <p>Hello {{name}}!</p>
  <md-card-content layout="row" layout-align="none" ng-repeat="datas in data.listProductCost  |  altDate ">
    <div class="dark" flex="30">HO Cost</div>
    <div>
      <span>{{datas.min}}</span> % to <span>{{datas.max}}</span> %
    </div>
  </md-card-content>
</body>

</html>

Вот мой рабочий код с фильтром angularjs. фильтр работает нормально, но я получаю ошибку итерации в консоли, цель фильтра - распечатать только минимальное и максимальное значение скидки. может ли кто-нибудь решить проблему или дать мне идею решить эту проблему заранее спасибо

0
Gopi Rain 17 Мар 2018 в 00:52

1 ответ

Лучший ответ

Я вижу, вы используете lodash. Почему бы не использовать _.minBy () вместо _.min ()?

Таким образом вы можете сократить свою функцию altDate до

altDate(_){
  return function(value) {
    return {
       min:  _.minBy(value, function(i) { return i.data }),
       max:  _.maxBy(value, function(i) { return i.data})
    }
  }
}
0
Satish Kumar 17 Мар 2018 в 01:31