2

I am trying to get length of filtered data, instead i get length of actual data, i have filtered data which has only the attribute placed. my plunk demo

Result i Got

Total 3 Notifications

2 quantities of V 4 Vanilla should be prepared

3 quantities of Power cut should be prepared

Result i Expect

Total 2 Notifications

2 quantities of V 4 Vanilla should be prepared

3 quantities of Power cut should be prepared

HTML

<p class="orderCounter">Total {{getOrderFoods(reduce).length }} Notifications</p>
<div ng-repeat="(key,data) in getOrderFoods() | filter: {confirm: 'placed'} | groupBy:'name'">
  <p><span>{{reduce(data)}}</span> quantities of <span>{{key}}</span> should be prepared </p>
</div>

Controller

$scope.getOrderFoods = function() {
var orderfood = [];

$scope.reduce= function(data){
   return data.reduce(function(previousValue,
   currentValue, currentIndex, array) {
  return previousValue + parseInt(currentValue.qty);
}, 0);
}

angular.forEach($scope.orders, function(order) {
  angular.forEach(order.orderfood, function(orderfoo) {
    if (orderfood.indexOf(orderfoo) == -1) {
      orderfood.push(orderfoo);
    }
  })
});
return orderfood;
}

JSON

$scope.orders = [{
"_id": "56e3bff0e9932ca6425e6f65",
"orderfood": [
  {
  "qty": "2",
  "confirm": "placed",
  "name": "V 4 Vanilla"
  }
],
"name": "Rohit",
"created": "2016-03-12T07:06:24.424Z"
},
{
"_id": "56e3bd5bc3791b973c048804",
"user": null,
"__v": 10,
"orderfood": [
  {
  "qty": "1",
  "confirm": "cancelled",
  "name": "V 4 Vanilla"
  },
  {
  "qty": "3",
  "confirm": "placed",
  "name": "Power cut"
  }
],
"name": "Rohit",
"created": "2016-03-12T06:55:23.244Z"
}];

my plunk demo

2 Answers 2

1

Add a directive for finding the length of the filtered data

directive

app.filter('numKeys', function() {
    return function(json) {
        var keys = Object.keys(json)
        return keys.length;
    }
});

html

<body ng-controller="MainCtrl">
    <p class="orderCounter">Total {{filtered | numKeys}} Notifications</p>
    <div ng-repeat="(key,data) in filtered =(getOrderFoods() | filter: {confirm: 'placed'} | groupBy:'name')">
        <p><span>{{reduce(data)}}</span> quantities of <span>{{key}}</span> should be prepared </p>
    </div>
</body>

Plunker Demo

If you have any doubt.Please let me know.Thanks

Sign up to request clarification or add additional context in comments.

1 Comment

@RohitKumarVinay Glad to help you
0

You can put this to get the lenght of your filtered array.

ng-repeat="item in $data| filter:f as results"

now you can use results to check its lenght or in another div similar to this.

ng-if="results.length === 0"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.