Demigodd
@Demigodd

Как вывести значение из массива в HTML элемент, по определенному шаблону?

Допустим у меня есть массив name = ['aaa', 'bbb'. 'ccc', 'ddd', 'eee'];
Как в angular`e с помощью ng-repeat получить вот такой вывод ?

This name aaa, bbb, ccc, ddd and eee super name.


Если написать к примеру так
<p>
This name <span ng-repeat="nm in name"> {{nm}}, </span> super name.
</p>


То вывод получиться таким.

This name aaa, bbb, ccc, ddd, eee, super name.


Так как можно получить 1-ый вариант ?
  • Вопрос задан
  • 541 просмотр
Решения вопроса 1
search
@search
мама говорит что я особенный
По классике такое делается фильтром, а не ng-repeat. Потому что с ng-repeat обработка ситуаций "пустой массив", "массив с одним элементом" и "массив с двумя элементами" (про массив с двумя элементами объяснено ниже) будут выглядеть по-уродски в шаблоне.

Вот как это выглядет

// human-friendly-concat.js
angular.module('yourModule', [])
.filter('humanFriendlyConcat', function() {
  return function(input) {
    input = input || [];
    if (input.length === 0) {
        return 'does not exist';
    }

    if (input.length === 1) {
        return input[0];
    }

   if (input.length === 2) {
        return input.join(' and ');
    }

    return input.slice(0, -1).join(', ') + ', and ' + input.slice(-1);
  };
})

// template.html
<p>
  This name <span ng-bind="name | humanFriendlyConcat"></span>.
</p>


Разница между массивом из двух элементов и массивом из больше чем двух элементов в так называемой "гарвардской запятой". Она ставится перед "and" в перечислении. Например, перечисляя страны мы напишем "Russia and Spain" для двух, но "Russia, Jamaica, and Spain" для трёх. Такие дела. https://en.wikipedia.org/wiki/Serial_comma
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы