一切正常但我从服务中获取来源时遇到问题。
我的服务代码如下。
app.factory('myService',
function($rootScope, ResourceData) {
var result = {};
var data = ResourceData.query();
result.getData = function() {
// problem here
}
return result;
});
而CONTROLLER包含代码。
app.controller('myController', ['$scope', 'myService',
function myController($scope, myService) {
$scope.data = myService.getData();
});
我的问题是,如果我在我的服务中有这样的功能
result.getData = function() {
return data;
}
一切正常但我需要在获得数据之前对其进行过滤
如果我像这样改变身体,我得到一个空数组,问题似乎来自AngularJS。
如果我创建静态数组,它就可以工作。
result.getData = function() {
var arr = [];
angular.forEach(data, function(item, key) {
// simple filter
if(item.ID > 10) {
return;
}
else {
arr.push(item);
}
});
return arr;
}
答案 0 :(得分:2)
“ResourceData。query()”的结果是异步的:
当从服务器然后返回数据时,该对象是资源类的实例...重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象)或数组取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。
当页面首次加载时,我猜测控制器在从服务器返回数据之前运行,所以第一次调用getData()时,data
可能还没有填充任何数据,所以你得到一个空数组。
您的问题的一个解决方案是使用Angular过滤器而不是在服务中过滤视图/ HTML中的数据。
<div ng-repeat="item in data | filter:myFilter">
{{item.ID}}: {{item...}}
</div>
然后在你的控制器中:
$scope.myFilter = function(item) {
return item.ID <= 10;
}