将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中。
问题:如何包装?
答案 0 :(得分:33)
我只对标签有同样的问题......这是我的解决方案:
<span ng-repeat-start="label in labels" ng-bind="label"></span> <span ng-repeat-end></span>
基本上会重复ng-repeat-start和ng-repeat-end之间的任何内容,包括空格......不幸的是,这意味着使用额外的span标记。不理想......
答案 1 :(得分:15)
我用css很好地解决了这个问题。只需将范围更改为display:inline-block
,它就会正确换行。
然而,在我的具体情况下,这不起作用。我需要空间,以便在text-align:justify
应用于它们时将元素正常运行(在父节点中均匀间隔它们)。所以我做了一个指示:
angular.module('whatever')
.directive('addASpaceBetween', [function () {
'use strict';
return function (scope, element) {
if(!scope.$last){
element.after(' ');
}
}
}
]);
然后在html中:
<span data-ng-repeat="(id, thing) in things" data-add-a-space-between>stuff</span>
答案 2 :(得分:7)
我的解决方案是(注意内跨后的空格字符):
<span ng-repeat="gate in gates"><span class="label label-info">{{gate}}</span> </span>
答案 3 :(得分:4)
以下是一些不同的方法:
您可以使用浏览器的原生包装功能,该功能在遇到空白时会换行。要强制执行此操作,请在值(see fiddle)之后手动插入空格:
<span ng-repeat="label in labels">{{label}} </span>
另一种方法是使用一些CSS技巧:
每个跨度后通过CSS插入空格:
span:after{content:" "}
浮动跨度
一个。如果div styling/border IS NOT important:
span { float:left; }
湾如果div styling/border IS important,还要更改div的显示:
div { display:inline-block; }
span { float:left; }
注意:除非div上有宽度限制,否则不会发生包装
答案 4 :(得分:3)
@ 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>
答案 5 :(得分:1)
答案 6 :(得分:1)
您可以使用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: ' ';
}
答案 7 :(得分:0)
<span ng-repeat="label in labels">{{label}}<br/></span>
或
<div ng-repeat="label in labels">{{label}}</div>
答案 8 :(得分:0)
这更像是一种风格问题,而非逻辑问题 也许以下内容可以帮助您:
<div><span ng-repeat="label in labels">{{label}}</span></div>
如果您需要进一步设计样式以使其适合您的应用,请尝试澄清您的问题,但我希望您明白这一点。
答案 9 :(得分:0)
Vol7ron的答案是可以接受的,否则你可以在数据元素的末尾添加一个空格。这真的有一个真实世界的用例吗?
你可以看到我在任何基于角度的背景之外做了几个跨度,并且表现出相同的行为。显然,当浏览器在一行上呈现单个单词时,如果没有空格,则不会在行之间对单词进行连字断开,它只是继续向右移动。
<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 "];
所以最终这里的问题不是角度或与重复相关的任何事情,而是浏览器如何解释这一点。
答案 10 :(得分:0)
您要查找的是
或 
标记。如果您计划稍后使用gulp任务或类似的东西缩小HTML,则此选项很有效。
<span ng-repeat="word in words">
<span class="label label-success">{{word}}</span>
</span>
这样即使您的html代码缩小,空间也会正常显示。
答案 11 :(得分:0)
您还可以使用以下方法,无需指令即可完成工作。
store/index.js