Как добавить пробел после элемента ng-repeat?

Использование ng-repeat с элементами span добавляет все элементы span вместе без пространства между ними, тем самым делая его нерушимой линией, которая не обертывается:

код:

<span ng-repeat="label in labels">{{label}}</span> 

отображает html:

<span>label1</span><span>label 2</span><span>label3</span><span>label 3</span><span>label5</span><span>label 4</span>

Это не завершает узкий div.

Вопрос: как это сделать?

http://jsfiddle.net/supercobra/6e8Bn/

Ответ 1

У меня такая же проблема только с тегами... Вот мое решение:

<span ng-repeat-start="label in labels" ng-bind="label"></span> <span ng-repeat-end></span>

В принципе все повторяется между ng-repeat-start и ng-repeat-end, включая пробелы... К сожалению, это означало использование дополнительного тега span. Не идеально...

Ответ 2

Я решил проблему с помощью css. Просто измените диапазон на display:inline-block, и он будет обертываться должным образом.

Однако в моей конкретной ситуации это не сработало. Мне понадобилось пространство, чтобы элементы корректно работали, когда к ним применялся text-align:justify (равномерно распределяя их по родительскому элементу). Поэтому я сделал директиву:

angular.module('whatever')
.directive('addASpaceBetween', [function () {
        'use strict';
        return function (scope, element) {
            if(!scope.$last){
                element.after('&#32;');
            }
        }
    }
]);

а затем в html:

<span data-ng-repeat="(id, thing) in things" data-add-a-space-between>stuff</span>

Ответ 3

Мое решение (обратите внимание на пробельный символ после внутреннего интервала):

<span ng-repeat="gate in gates"><span class="label label-info">{{gate}}</span> </span>

Ответ 4

Вот несколько разных подходов:

HTML

Вы можете использовать встроенную оболочку браузера, которая обертывается, когда встречается пустое пространство. Чтобы принудительно выполнить его, вручную вставьте пробел после значения (см. Скрипту):

<span ng-repeat="label in labels">{{label}} </span>

CSS

Альтернативой является использование некоторых трюков CSS:

  • Вставка пробела через CSS после каждого интервала:

    span:after{content:" "}
    
  • Плавание пробелов

    а. Если div styling/border НЕ важно:

    span { float:left; }
    

    б. Если div styling/border IS важно, также измените отображение div:

    div { display:inline-block; }
    span { float:left; }
    

    Примечание: обертка не произойдет, если на div не существует ограничение ширины

Ответ 5

Ответ на

@Pavel помог мне, в частности, используя ng-repeat для <span> для ярлыков начальной загрузки. Они должны иметь конечное пустое пространство, иначе между ними не будет места. Удвоение значения span, поэтому класс label label-default не находится на том же span, что и тэг ng-repeat.

<span ng-repeat="value in values">
  <span class="label label-default">{{value}}</span>
</span>

http://jsfiddle.net/gLmtyfj4/2/

Ответ 6

Если vol7ron-ответ не работает, вы можете отображать строки в строке и добавлять к ним поля.

Здесь скрипка - JSFiddle

span {display:inline-block; margin-right:2px;}

Ответ 7

Вы можете использовать ng-class и добавить класс для всех, кроме последнего элемента.

<span ng-repeat="label in labels"
      ng-class="{space:!$last,last:$last}">{{label}}</span>

и

span.space:after {
    // content: ', '; // I like comma separated
    content: ' ';
}

Вот скрипка. http://jsfiddle.net/dnozay/d3v6vq7w/

Ответ 8

<span ng-repeat="label in labels">{{label}}<br/></span> 

или

<div ng-repeat="label in labels">{{label}}</div> 

Ответ 9

Это больше проблема стиля, а не логическая.
Возможно, вам может помочь следующее:

<div><span ng-repeat="label in labels">{{label}}</span></div>

Если вам нужен дополнительный стиль, чтобы он вписывался в ваше приложение, попробуйте уточнить свой вопрос, но я надеюсь, что вы поняли.

Ответ 10

Ответ Vol7ron допустим, иначе вы можете добавить пробел в конец элементов данных. Действительно ли это имеет реальный случай использования в мире?

http://jsfiddle.net/6e8Bn/6/

Вы можете видеть, что я сделал пару проходов вне любого контекста angular, и такое же поведение проявляется. По-видимому, поскольку браузер отображает одно слово в строке и не выполняет перенос слов через строки, если нет места, он просто продолжает движение вправо.

<span>I'm</span><span>not</span><span>even</span><span>angular</span><span>and</span><span>I</span><span>don't</span><span>wrap</span>

Пространства Javascript добавляются к данным:

$scope.labels=["alongwooooooooord ", "alongwooooooooord2 ", "alongwooooooooord3 ", "ealongwooooooooord5 ", "falongwooooooooord5 "];

Итак, в конечном итоге проблема здесь не в angular или что-либо, что связано с повторением, а просто как браузер интерпретирует это.

Ответ 11

То, что вы ищете, это тег &nbsp; или &#160;. Этот вариант хорошо работает, если вы планируете минимизировать свой HTML позже с помощью задания gulp или чего-то подобного.

<span ng-repeat="word in words">
    <span class="label label-success">{{word}}</span>&nbsp;
</span>

Таким образом, пространство будет отображаться правильно, даже если ваш HTML-код минимизирован.

Ответ 12

Вы также можете использовать следующий метод, он выполнит работу без директивы.

<div ng-repeat="label in labels">{{label}} <span ng-if="!$last"> </span></div>