【发布时间】:2015-07-14 09:41:39
【问题描述】:
我的 控制器 中有一个非常大的 JSON,它是从 MongoDB 数据库中获取的。这是它的结构(没有添加不相关的键):
$scope.keyword; //ignore for now explained below
$scope.data = [
{"key" : [
{"nested_key": //some value},
{"nested_key": //some value} //so on
]
},
{"key" : [
{"nested_key": //some value},
{"nested_key": //some value}
]
},
{"key" : [
{"nested_key": //some value},
{"nested_key": //some value}
]
}
]
这是显示 JSON 的 HTML 模板:
<div ng-repeat="outer in data">
<div ng-repeat="inner in outer.key | keywordFilter: keyword">
//print inner values
</div>
</div>
这里,'keyword' 保存将用于过滤内部 ng-repeat 循环的值。这是我的过滤器:
app.filter('keywordFilter', function() {
return function(collection, keyword) {
//Iteration over the entire collection. If keyword exists add the item to output
return output;
}
})
现在,正如预期的那样,只要我修改“$scope.keyword”,过滤器就会运行。当我点击一个按钮时它会更新如下:
HTML:
<input type="text" ng-model="temp" />
<button ng-click="updateKeyword()">
控制器:
$scope.updateKeyword = function() {
$scope.keyword = $scope.temp;
}
问题:
由于数据量巨大,过滤过程大约需要 10-15 秒(有时浏览器会挂起!),然后从过滤器返回的新过滤数据显示在屏幕上。
要求:
我想做的是在这 10-15 秒内我想显示一个加载器,计算完成后,显示新闻。我如何实现这一目标?
我尝试了什么: 我想一旦我点击过滤器按钮,我需要等待 ng-repeat 循环完成,因此我尝试通过引用 this thread.
在 ng-repeat 完成时触发一个事件但是我发现只有在第一次显示数据时才会触发该事件,而不是在单击过滤器按钮并通过关键字过滤器过滤数据时触发。
【问题讨论】:
-
嵌套 ng-repeat 是一种资源浪费。修复方法是使用 JS 函数遍历
data并使用自定义指令而不是“html 编程”。
标签: javascript angularjs angularjs-ng-repeat angularjs-filter