【问题标题】:how to implement a counter with AngularJS inside a ng-repeat?如何在 ng-repeat 中使用 AngularJS 实现计数器?
【发布时间】:2018-02-08 15:16:15
【问题描述】:

我有一个应用程序,我从 API 中获取大量数据,这些数据表示在给定条件下完成的活动 给定月份中的某天,并显示在表格中。

我可以有不同的桌子(假设一张用于工作活动,一张用于学校等等)。

在表格中,<TH> 是月份中的日期,每行的第一个 TD 是月份。 只有当该月有数据时,该表才会为任何给定月份生成一行。

第一个 ng-repeat 将根据不同的活动创建 X 个表,并且 第二个嵌套的 ng-repeat 将在表的行中填充月份的数据。

一切正常,但我有一个问题。 这些表有一个特定的打印视图,之前它是每页一个表(我使用 css 规则在每个表之后分页)

但现在我想实现更好的东西,因为一张表只能有一行 (假设你只有一月份有活动,其他月份没有活动) 当它打破页面并在新页面中仅打印一个带有一行的表格时,它非常难看。

所以我想实现一个计数器,假设在 15 行之后它会打破页面。

15 行是指全局行,因此它可能是一个包含 12 行(12 个月的数据)的完整表 通过一个只有 3 行的表,然后它将为下一个表分页。

在 angularJS 中实现此类目标的最佳方法是什么?

with: p.presences.length 我得到 ng-repeat 中每个表的月数作为回报。

所以我的想法是有一个计数器,在 ng-repeat 的每次迭代中添加 p.presences.length,然后我会在 ng-class 中使用该计数器来打破页面,

目前我正在使用此代码来中断页面:

<div class="breakPagePrint" ng-class="p.print ? 'showTablePrint' : 'noDisplay'"> </div>

使用这个 css 代码:

.breakPagePrint {
    page-break-before: always;
}

p.print 是一个布尔值,由每个表格上的复选框给出,因此如果用户希望将给定表格包含在打印页面中,他将选中该框。

所以我的想法是在这个 ng-class 中加入一个带有计数器的表达式,类似于

ng-class= "tableCounter > 15 && p.print ? 'showTablePrint' : 'noDisplay'"

但是在这种情况下,计数器应该在 15 之后重置,否则它不会在再过 15 个计数(在 30 处)后再次中断页面。

如果有人对如何很好地实现计数器以及如何在我的情况下最好地使用它有一些想法。

谢谢

【问题讨论】:

  • 您应该将这种逻辑放入您的组件或控制器中。不要在你的视野中处理你的计数器。
  • (nice essay) tl;dr:你试过用$index吗?这是ng-repeat的内置迭代器
  • 如果你用一些示例代码来创建 plunker 会很好。
  • 因为我以前从未在 angularJS 中放置过计数器,所以我正在寻找提示,我不反对将其放入控制器中,只是寻找最聪明的方法来实现我在这里尝试做的事情Aleksey,$index 将如何帮助我?在我的情况下如何使用它?
  • 我不知道要显示什么示例代码,因为所有其余代码都无关紧要,我可以访问每个表将具有的数字或行,并且我为它编写了代码,并且我希望在 X 行后我得到一个分页符,如果你认为一些特定的代码可以帮助我知道,但我想我把所有需要的东西都放在了这个问题上

标签: css angularjs counter


【解决方案1】:

使用 ng-repeat 的 $index 来检查它何时覆盖了多条 15 条记录,或者使用 p.presences.length 如果这提供了您需要的属性(即每行的计数器)。然后在每个倍数处插入 div。

假设您上面的div 当前有效(但目前仅适用于 15 个)然后只需将以下代码添加到该div。这使用了 15 的模数。

<div ng-class="{'breakPagePrint':(p.presences.length%15==0),'noDisplay':(p.presences.length%15!=0)}"></div>

(我是para-coding,所以不能100%确定语法)但是试试看它是否有效。但基本上只要p.presences.length 是 15 的倍数或每 15 条记录,它就会添加中断 div。

【讨论】:

  • 感谢您的回答!我上面的代码不起作用,这是一个想法! p.presences.length 的主要问题是它返回表中行数的值,但它不是累积的!这意味着在一次迭代中它可以返回 3,并且在接下来的 6 中,如果第一次迭代中的表有 3 行,而在第二次迭代中它有 6!我需要一个计数器,在 15 GLOBAL 行之后用 ng-class 更改类!如果我设法以某种方式将每次迭代的所有 p.presences.length 总和存储在一个变量中,然后将其与模数为 15 的 ng-class 一起使用,您的想法就会奏效!
  • 所以如果p.presences.length 不起作用,请改用$index。那是重复的内部计数器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多