Comment ajouter un espace après l'élément ng-repeat?
en utilisant ng-repeat
span
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?
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...
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(' ');
}
}
}
]);
puis dans le code html:
<span data-ng-repeat="(id, thing) in things" data-add-a-space-between>stuff</span>
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>
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:
insérer un espace blanc via CSS après chaque span:
span:after{content:" "}
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
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 span
ng-repeat
le truc.
<span ng-repeat="value in values">
<span class="label label-default">{{value}}</span>
</span>
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/
<span ng-repeat="label in labels">{{label}}<br/></span>
ou
<div ng-repeat="label in labels">{{label}}</div>
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.
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?
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.
ce que vous cherchez est le
ou  
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>
</span>
de cette façon l'espace s'affichera correctement même si votre code html est minifié.