【发布时间】:2016-04-11 17:49:13
【问题描述】:
首先,这是我的小提琴,所以你可以理解我的问题:https://jsfiddle.net/860Ltbva/5/
我想在加载循环 ng-repeat 时显示加载消息,并在加载所有元素时隐藏它。
我用这个小提琴来帮忙:http://jsfiddle.net/jwcarroll/ZFp3a/
此代码使用指令来了解何时加载最后一个元素:
app.directive("repeatEnd", function() {
return {
restrict: "A",
link: function(scope, element, attrs) {
if (scope.$last) {
scope.$eval(attrs.repeatEnd);
}
}
};
});
第一个问题:
仅当我加载每个元素时才有效,但我使用 ng-if 过滤它,这就是我遇到问题的地方。因为如果未加载最后一个元素,则 $scope.$last 不正确。因此,不是每次都隐藏加载器并在加载后删除,而是仅在一种情况下将其删除。
HTML:
<div class="test" ng-repeat="light in lights" ng-if="showLights(light.status)" repeat-end="onEnd()">
<span>{{light.name}} - {{light.status}}</span></div>
还有控制器:
app.controller("MyCtrl", function($scope, $timeout) {
$scope.lights = [];
$scope.loadingPatients = true;
$scope.showStatus = 'on';
for (var x = 0; x < 10000; x=x+2) {
$scope.lights[x] = {'name': 'kitchen', 'status':'off'};
$scope.lights[x+1] = {'name': 'living room', 'status':'on'};
}
$scope.showStatusFct = function(status){
$scope.loadingPatients = true;
$scope.showStatus = status;
};
$scope.showLights = function(lightStatus) {
if ($scope.showStatus == 'on') {
if (lightStatus == 'on')
return true;
} else {
if (lightStatus == 'off')
return true;
}
}
$scope.onEnd = function() {
$scope.loadingPatients = false;
};
});
第二个问题
变量 $scope.loadingPatients 在文件加载后更新,而不是在我单击时更新,这很奇怪,因为您看不到加载器
对这些问题有什么想法吗? 谢谢
【问题讨论】:
-
伙计,如果明天没有答案,我会帮你的。 ;)
-
谢谢,如果你能帮助我,那就太好了!我目前正在尝试在 ng-repeat 中使用“filter”选项,而不是 ng-if。效果更好:每次都显示“已加载”,但我在等待时看不到加载器
-
请更新 plunker。 ;)
-
好的,您找到了解决方案。但是你可以使用 ng-show,而不是 ng-if。但是,在此之前,您可以对数据集进行分页...想想您的用户将如何阅读包含 100.000 条记录的页面...我更喜欢使用“search”和“limitTo”过滤器来保持可用性。
标签: javascript angularjs angularjs-ng-repeat loader angular-ng-if