【发布时间】:2017-06-20 15:50:24
【问题描述】:
我遇到了 ngRepeat 的问题:
我想以两种不同的方式显示学生列表。在第一个中,它们按组过滤,而在第二个中,它们没有被过滤。
整个显示非常复杂,我使用带有模板的 ngInclude 来显示每个学生。我可以通过更改bClasseVue 在视图之间切换,每个切换后跟一个$scope.$apply()。
<div ng-if="currentCours.classesOfGroup !== undefined"
ng-show="bClassesVue">
<div ng-repeat="group in currentCours.classesOfGroup">
<br>
<h2>Classe : [[group.name]]</h2>
<div class="list-view">
<div class="twelve cell"
ng-repeat="eleve in group.eleves | orderBy:'lastName'"
ng-include="'liste_eleves.html'">
</div>
</div>
</div>
</div>
<div class="list-view" ng-show="!bClassesVue">
<div class="twelve cell"
ng-repeat="eleve in currentCours.eleves.all"
ng-include="'liste_eleves.html'">
</div>
</div>
我的学生名单发生变化时会出现问题(currentCours 此处)。不是刷新 ngRepeat,而是连接两个列表,但仅在未过滤的视图中。
我尝试在战略位置添加一些$scope.$apply(例如,我同步了我的列表)但没有帮助。
EDIT : 用于刷新控制器中currentCours 的函数。当在菜单中选择“课程”时调用它。
$scope.selectCours = function (cours) {
$scope.bClassesVue = false;
$scope.currentCours = cours;
$scope.currentCours.eleves.sync().then(() => {
if ($scope.currentCours.classe.type_groupe === 1) {
let _elevesByGroup = _.groupBy($scope.currentCours.eleves.all, function (oEleve) {
return oEleve.className;
});
$scope.currentCours.classesOfGroup = [];
for(let group in _elevesByGroup) {
$scope.currentCours.classesOfGroup.push({
name: group,
eleves: _elevesByGroup[group]
});
}
$scope.bClassesVue = true;
}
});
utils.safeApply($scope);
};
【问题讨论】:
-
在此处使用大括号
<h2>Classe : {{group.name}}</h2> -
分享更多
controllercode ...你不应该使用$apply()imo ... -
@sachilaranawaka 我们正在开发一个自制的框架,所以我们使用括号而不是花括号。
-
@daan.desmedt 控制器比较复杂,就是一堆数据同步功能,不知道有没有用。但如果你想要一些具体的东西,也许我可以分享。
-
如果您谈论的是串联结果 - 我想您的控制器内部正在发生一些事情......但是如果没有检查代码的能力就很难帮助您......
标签: angularjs scope angularjs-ng-repeat