注意,你得到的是' Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! . 这是因为Angular在每次迭代时都会调用 matrical 函数 . 据称,您可以使用 as results 别名来阻止Angular重新评估该集合,但我没有运气 . 为此,最好过滤控制器内部的网格,并将该值用于转发器: $filter('matrical')(items) - but please post back if you come across an elegant way of filtering it in the ng-repeat .
5 回答
这比AngularJS更像是样式/标记问题 . 如果你真的想,你可以这样做:
http://jsfiddle.net/JG3A5/
对不起我的HAML和Bootstrap3:
还有另一个版本,可以使用过滤器:
如果您的所有项目都在一个阵列中,那么最好的办法是在CSS中创建一个网格 . 这篇文章应该会有所帮助:http://css-tricks.com/dont-overthink-it-grids/
您可以使用ng-repeat中的$ index为列应用正确的类(在本例中为4列网格):
如果你有一个二维数组(分成行和列),这将开辟更多的可能性,比如实际使用HTML表 .
我发现使用ng-repeat与ng-if结合并使用$ index抵消任何索引更容易 . 记住下面的玉:
在性能,动态和可读性之间
It seems putting the logic in your JavaScript is the best method. I would just bite-the-bullet and look into:
@ Params :( list,n)
其中list是任何数组,n是每行所需的任意列数
@返回:一个matroid
@注意:此函数用于根据任意数量的列定向子阵列,其行数不一致 . 换句话说,x =期望列,y = n .
然后,您可以创建一个角度
filter
来处理这个:过滤:
控制器:
视图:
有了这个,你可以看到你获得
n
行数 - 每行包含“3
”列 . 当您更改所需列的数量时,您会注意到行数会相应地更改(假设列表长度始终相同;)) .这是fiddle .
注意,你得到的是'
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
. 这是因为Angular在每次迭代时都会调用matrical
函数 . 据称,您可以使用as results
别名来阻止Angular重新评估该集合,但我没有运气 . 为此,最好过滤控制器内部的网格,并将该值用于转发器:$filter('matrical')(items)
- but please post back if you come across an elegant way of filtering it in the ng-repeat .我再次强调,你可能会试图在你的视野中写下逻辑,从而走向黑暗的小巷 - 但我鼓励你在你看来尝试它,如果你还没有 .
编辑
此算法的使用应与 Matrical Data-Structure 结合使用,以提供
push
,pop
,splice
和其他方法 - 与适当的逻辑串联,以便在需要时补充 Bi-Directional Data-Binding . 换句话说,数据绑定不会开箱即用(当然),因为当新项目添加到列表中时,必须重新评估整个列表以保持矩阵的结构完整性 .Suggestion: 将
$filter('matrical')($scope.list)
语法与$scope.$watch
结合使用,并重新编译/计算矩阵的项目位置 .干杯!