Разделить для повторного воспроизведения?

Простой вопрос: если у меня это в контроллере:

$scope.somedata = 'Item 1, Item 2'; // set from something else

Есть ли способ разделить somedata для моего представления в выражении ngRepeat? Что-то вроде:

<div ng-repeat="item in somedata | split(',')">{{item}}</div>

который не работает...

Или мне нужно делать

$scope.somedata = 'Item 1, Item 2'; // set from something else
$scope.items = somedata.split(',');

а затем

<div ng-repeat="item in items>{{item}}</div>

Я думаю, что я не совсем понимаю, что могу сделать в выражении в AngularJS.

Ответ 1

Строка справа от | разрешена для имени фильтра (обычно это фильтры форматирования строк, но команда angular также предоставила фильтр filter, который возвращает фильтрованный массив (a бит, вводящий в заблуждение, поскольку оба имеют одно и то же имя). Вы можете создать свой собственный фильтр разделения, чтобы выполнить то, что вы хотите:

angular.module('myFilters', []).
  filter('split', function() {
    return function(input, delimiter) {
      var delimiter = delimiter || ',';

      return input.split(delimiter);
    } 
  });

Вы можете использовать фильтр следующим образом:

<div ng-repeat="item in somedata | split">

Или укажите разделитель:

<div ng-repeat="item in somedata | split:,">

Рассмотрим вышеупомянутый псевдокод, потому что я его не тестировал.

Le plunker: http://plnkr.co/edit/hk6F0Y6p5YAXv6fyXfSz?p=preview

Ответ 2

Думаю, я опоздал, но почему бы просто не сделать это:

<div ng-repeat="item in somedata.split(',')">{{item}}</div>

отлично работает.

JSBin для доказательства!

Ответ 3

прокомментировал разделитель здесь

angular.module('myFilters', []).
  filter('split', function() {
    return function(input, delimiter) {
      //var delimiter = delimiter || ',';

      return input.split(delimiter);
    } 
  });

Вы можете использовать фильтр следующим образом: также добавлен трек по индексу $index, чтобы избежать сбоя из-за повторяющихся значений

<div ng-repeat="item in somedata | split:',' track by $index">