как отфильтровать данные по атрибуту объекта в ng-repeat angularjs

0

im начинающий студент на angularjs

предположим, что мы имеем josn obj like

 [ {
        "Title": "a",
        "Date": "2015-05-31",
        "a": "11",
        "b": 22,
    },
     {
        "Title": "b",
        "Date": "2015-05-11",
       "a": "33",
        "b": 44,
    },
    {
        "Title": "c",
        "Date": "2015-04-11",
       "a": "55",
        "b": 66,
    },
    {
        "Title": "d",
        "Date": "2015-03-03",
       "a": "11",
        "b": 22,
    }
]

ngRepeat

<li ng-repeat="obj in objs">{{obj.Date  | date:"MM/yyyy"}}</li>

у нас есть две данные в MAY (05-31, 05-11) в json obj, и я хочу сохранить одну информацию за месяц, просто сохраните вторую.

как писать флитер я в замешательстве

Теги:
filter
ng-repeat

1 ответ

0
Лучший ответ

Вам нужно создать фильтр и использовать его внутри ng-repeat. Синтаксис создания фильтров следующий:

angular
  .module('myModule')
  .filter('myFilter', function myFilter(service1, service2) { //to ask for deps
     return function(input) { //here you do the real filtering
        return doSomethingWithInput(input);
     }
  })

Чтобы применить логическую фильтрацию, которую вы запрашиваете, вы можете создать такой фильтр:

angular
  .module('myModule')
  .filter('oncePerMonth', oncePerMonth);

function oncePerMonth() {
  return function (data) {
    var filtered = [], months = [];
    data.forEach(function(item){
      var month = item.Date.substr(0,7);
      if (~~months.indexOf(month)){
        months.push(month);
        filtered.push(item);
      }
    });
    return filtered;
  }
}

С помощью этого фильтра шаблон html будет примерно таким:

<li ng-repeat="obj in vm.objs | oncePerMonth">
   {{obj.Date | date:"MM/yyyy"}} {{obj.Title}}
</li>

Вы можете найти рабочий Plnkr здесь: http://plnkr.co/edit/sg0wWPuUE0cJwoZj2KuS?p=preview

  • 0
    вау спасибо большое я вижу много из вашего ответа спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню