我已经被这个问题困扰了一段时间,所以我希望你能让我朝正确的方向前进。
我的角度工厂返回一个看起来像这样的对象
[{
name:"Fall",
year:"20xx",
id: some_id_#
}, ....]
这是一个学期列表,每个学期都有一个对象,其中包含名称、年份和学期 ID。
我在 UI 框架中使用 ionic,我想将 HTML 输出设置为如下所示...
2012
落下
春天
2013
冬天
春天
2014
etc
etc
其中每年是一个列表分隔符。我的 HTML 目前看起来像这样
<ion-list show-delete="data.showDelete">
<!-- I WAN TO CHANGE THIS TO BE A DYNAMIC HEADER ADDED FOR EACH NEAR YEAR-->
<ion-item class="item-divider">
Semesters
</ion-item>
<ion-item ng-show="semesters.length == 0">
No semesters yet!
</ion-item>
<ion-item class="item-dark item-icon-right" href="#/app/class-list/{{semester.id}}/{{semester.name}}/{{semester.year}}" ng-repeat="semester in semesters">
<ion-delete-button class="ion-ios7-trash-outline"
ng-click="deleteSemester(semester)">
</ion-delete-button>
{{semester.name}} {{semester.year}}
<i class="icon ion-ios7-arrow-forward"></i>
</ion-item>
</ion-list>
我不喜欢用逻辑混乱我的视图,因为那属于控制器,但我不知道如何去做,啊哈。
多谢你们!
我不确定这是否是最好的方法,但我构建了一个 CodePen 来执行此操作:
- 获取原始列表(这将是您的真实数据)
- 通过为唯一的起始字母创建附加项目来修改列表
- 在视图中,我们查看数据是否是字母,如果是,则将其视为列表分隔符
这有点像他们的一支笔的工作原理(http://codepen.io/ionic/pen/uJkCz http://codepen.io/ionic/pen/uJkCz)。我觉得有点不对劲,但似乎效果很好。这是控制器部分:
.controller('RootCtrl', function($scope) {
//orig data
var list = [];
list.push({name:"Gary"});
list.push({name:"Gosh"});
list.push({name:"Ray"});
list.push({name:"Sam"});
list.push({name:"Sandy"});
$scope.list = [];
var lastChar = '';
for(var i=0,len=list.length; i<len; i++) {
var item = list[i];
if(item.name.charAt(0) != lastChar) {
$scope.list.push({name:item.name.charAt(0),letter:true});
lastChar = item.name.charAt(0);
}
$scope.list.push(item);
}
})
然后视图检查数据是人还是字母。再说一遍,这感觉有点蹩脚,但是......
<ion-list type="list-inset">
<ion-item ng-repeat="person in list" ng-class="person.letter? 'item-divider':''">
{{person.name}}
</ion-item>
</ion-list>
您可以在这里运行:http://codepen.io/cfjedimaster/pen/HqrBf http://codepen.io/cfjedimaster/pen/HqrBf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)