Разделить для повторного воспроизведения?
Простой вопрос: если у меня это в контроллере:
$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">