Общий угловой ng-repeat и отслеживание по $index

Просто общий вопрос об использовании track by $index в ng-repeat, я не смог найти решение в документации...

У меня есть <div ng-repeat="concert in concerts track by $index">{{concert}}</div>, под ним у меня есть массив, который динамически заполняется временем начала концерта, например, <p>{{startTime[$index]}}</p>. Некоторые концерты, однако, не имеют действительного времени начала, есть ли способ выяснить, есть ли время начала для этого [$index], и если нет, определить текст, который занимает его место?

Я знаю, что это своего рода открытый конец, и я мог бы использовать функцию для сравнения длины массива concerts и массива startTimes и заполнения оставшихся полей в startTimes данными, но я надеялся, что может быть более простой способ? Лучшая практика?

Спасибо за совет!


person Quade Dumont    schedule 08.12.2015    source источник
comment
не используйте $index для этой задачи. $index не является индексом уникального элемента в массиве; вместо этого это смещение итератора для ng-repeat. Это означает, что фильтры могут привести к тому, что $index будет указывать на другой элемент, чем ожидалось.   -  person Claies    schedule 09.12.2015


Ответы (1)


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

https://docs.angularjs.org/api/ng/filter/filter

app.filter('startingTimeExists', () => {
  return (collection) => {
    let filtered = [];
    angular.forEach(collection, (concert) =>{
      if(concert.hasOwnProperty('startingTime')){
        filtered.push(concert);
      } else {
        concert.startingTime = "7:00PM"
        filtered.push(concert)
      }
    })
    return filtered;
  };
});

возможно, что-то вроде вышеприведенного сработает. Я не проверял это.

person Darien Lombardi    schedule 08.12.2015