По классике такое делается фильтром, а не 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