Comment ajouter un espace après l'élément ng-repeat?

en utilisant ng-repeatspan ajoute tous les éléments span éléments réunis sans espace entre eux, ce qui en fait une ligne incassable qui ne s'enroule pas:

Code:

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

affiche le code html:

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

ceci ne s'enroule pas dans un div étroit.

Question: comment le faire envelopper?

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

21
demandé sur gion_13 2013-08-26 01:49:26

11 réponses

j'ai le même problème qu'avec les balises... C'était ma solution:

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

En Gros, tout ce qui se trouve entre ng-repeat-start et ng-repeat-end sera répété, y compris les espaces... Malheureusement, cela signifiait utiliser une étiquette de portée supplémentaire. Pas l'idéal...

33
répondu JustMaier 2013-10-22 00:25:52

j'ai bien résolu le problème avec css. Il suffit de changer la portée en display:inline-block et il s'enroule correctement.

cependant, dans ma situation particulière, cela n'a pas fonctionné. J'ai besoin de l'espace pour que les éléments se comporter correctement lorsqu' text-align:justify a été appliqué (espacer uniformément dans le parent). J'ai donc fait une directive:

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

puis dans le code html:

<span data-ng-repeat="(id, thing) in things" data-add-a-space-between>stuff</span>
14
répondu TorranceScott 2015-11-14 07:17:55

Ma solution est (notez le caractère d'espace après l'intérieure span):

<span ng-repeat="gate in gates"><span class="label label-info">{{gate}}</span> </span>
7
répondu Pavel 2013-10-25 13:40:17

voici quelques approches différentes:

HTML

vous pouvez utiliser la fonction d'enroulement natif du navigateur, qui s'enroule lorsque de l'espace blanc est rencontré. Pour l'appliquer, insérez manuellement un espace après la valeur (voir tripoter):

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

CSS

une alternative est d'utiliser quelques astuces CSS:

  1. insérer un espace blanc via CSS après chaque span:

    span:after{content:" "}
    
  2. Flottant Travées

    un. Si div style/border IS NOT important:

    span { float:left; }
    

    B. Si div style/border important, également modifier affichage div:

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

    Remarque: l'emballage n'a pas lieu, sauf s'il existe une largeur de restriction sur la div

4
répondu vol7ron 2016-08-09 19:54:24

la réponse de@Pavel m'a aidé, en particulier en utilisant ng-repeat sur un spanlabel label-default classe n'est pas sur le même spanng-repeat le truc.

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

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

3
répondu Jonathan 2016-01-22 15:30:02

si la réponse de vol7ron ne fonctionne pas, vous pouvez afficher des portées en ligne et ajouter de la marge droite à celles-ci.

Voici le violon - JSFiddle

span {display:inline-block; margin-right:2px;}
1
répondu Nix 2013-09-02 09:34:48

Vous pouvez utiliser ng-class et ajouter une classe pour tous, mais le dernier élément.

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

et

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

voici le violon. http://jsfiddle.net/dnozay/d3v6vq7w/

1
répondu dnozay 2015-05-15 18:25:35
<span ng-repeat="label in labels">{{label}}<br/></span> 

ou

<div ng-repeat="label in labels">{{label}}</div> 
0
répondu zsong 2013-08-25 21:55:42

C'est plus un problème de style, pas un problème de logique.

Peut-être que ce qui suit peut vous aider:

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

Si vous avez besoin de plus de style pour l'adapter à votre application, essayez de clarifier votre question, mais j'espère que vous obtenez le point.

0
répondu gustavohenke 2013-08-25 22:33:24

la réponse de Vol7ron est acceptable sinon vous pouvez ajouter un espace dans la fin des éléments de données. Est-ce qu'il y a vraiment un cas d'utilisation dans le monde réel?

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

vous pouvez voir que j'ai fait quelques travées en dehors de n'importe quel contexte basé sur l'angle et le même comportement est exposé. Apparemment, comme le navigateur rend un mot simple sur une ligne et ne fait pas la coupure de trait d'union des mots à travers les lignes s'il n'y a pas d'espace, il continue tout simplement continuation vers la droite.

<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>

espaces Javascript ajoutés aux données:

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

donc, en fin de compte, la question ici n'est pas angulaire ou quoi que ce soit lié à la répétition, mais juste comment les navigateurs interprètent cela.

0
répondu shaunhusain 2013-08-26 01:30:58

ce que vous cherchez est le &nbsp; ou &#160; balise. Cette option fonctionne bien si vous prévoyez de minifier votre HTML plus tard avec une tâche gulfp ou quelque chose de similaire.

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

de cette façon l'espace s'affichera correctement même si votre code html est minifié.

0
répondu Azarus 2018-05-07 13:44:19