在 HTML 代码中简化 AngularJS ng-repeat 循环
Simplify AngularJS ng-repeat looping inside HTML code
我下面有一个 HTML 代码,它利用 ng-repeat 来显示数据。数据分为两列,每列将包含或多或少相同数量的数据(通过链接显示)。
但是,为此,我遍历了同一组数据两次,使用了两个不同的 ng-repeat 条件(第一次遍历显示第一列中的第一组数据,第二次遍历显示第二列第二组数据)。
我认为这确实是多余的(也很耗时),因为对于第一次遍历,我得到了前半部分数据然后跳过其余部分(通过 ng-if),而对于第二次遍历,我得到下半场。
有没有办法只遍历一次数据,但仍然能够显示数据的 division?
注意:我试过在第一个 < div class="column" > 之前放置 ng-repeat,并保留 中的条件语句,但发生的情况是即使 也会重复,这不应该是这样的。我只想让 标签在相应的列中重复。
代码
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies" ng-if="$index <= (agencies.length/2)">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies" ng-if="$index > (agencies.length/2)">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
</div>
我的改进是使用 'limitTo' 管道,而不是 ng-if。
看看这个版本,效率更高
{{agFull = agencies.length; ""}}
{{agHalf = agFull/2; ""}}
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies | limitTo : agHalf">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies | limitTo : agFull : agHalf">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
</div>
我还建议将 agencies.length & agencies.length/2 存储在一个变量中,就像我在上面所做的那样。如果您不喜欢模板变量,您也可以为此使用控制器。
既然你想要优化,我建议你在控制器中将你的数组分成两个。这将消除冗余。不要让你的视图影响控制器的工作。
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies[0]" >
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies[1]">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
我下面有一个 HTML 代码,它利用 ng-repeat 来显示数据。数据分为两列,每列将包含或多或少相同数量的数据(通过链接显示)。
但是,为此,我遍历了同一组数据两次,使用了两个不同的 ng-repeat 条件(第一次遍历显示第一列中的第一组数据,第二次遍历显示第二列第二组数据)。
我认为这确实是多余的(也很耗时),因为对于第一次遍历,我得到了前半部分数据然后跳过其余部分(通过 ng-if),而对于第二次遍历,我得到下半场。
有没有办法只遍历一次数据,但仍然能够显示数据的 division?
注意:我试过在第一个 < div class="column" > 之前放置 ng-repeat,并保留 中的条件语句,但发生的情况是即使
代码
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies" ng-if="$index <= (agencies.length/2)">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies" ng-if="$index > (agencies.length/2)">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
</div>
我的改进是使用 'limitTo' 管道,而不是 ng-if。
看看这个版本,效率更高
{{agFull = agencies.length; ""}}
{{agHalf = agFull/2; ""}}
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies | limitTo : agHalf">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies | limitTo : agFull : agHalf">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
</div>
我还建议将 agencies.length & agencies.length/2 存储在一个变量中,就像我在上面所做的那样。如果您不喜欢模板变量,您也可以为此使用控制器。
既然你想要优化,我建议你在控制器中将你的数组分成两个。这将消除冗余。不要让你的视图影响控制器的工作。
<div class="ui two column doubling stackable grid">
<div class="column">
<h5>
<div ng-repeat="agency in agencies[0]" >
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>
<div class="column">
<h5>
<div ng-repeat="agency in agencies[1]">
<a href="agency.html#{{agency.url | num}}">{{agency.name}}</a><br>
</div>
</h5>
</div>