Javascript AngularJS从服务返回资源
一切正常,但我无法从服务中获取来源 我有下面的服务代码Javascript AngularJS从服务返回资源,javascript,angularjs,Javascript,Angularjs,一切正常,但我无法从服务中获取来源 我有下面的服务代码 app.factory('myService', function($rootScope, ResourceData) { var result = {}; var data = ResourceData.query(); result.getData = function() { // problem here } return result; }); 和控制器包
app.factory('myService',
function($rootScope, ResourceData) {
var result = {};
var data = ResourceData.query();
result.getData = function() {
// problem here
}
return result;
});
和控制器包含代码
app.controller('myController', ['$scope', 'myService',
function myController($scope, myService) {
$scope.data = myService.getData();
});
我的问题是,如果我在我的服务中有这样的功能
result.getData = function() {
return data;
}
一切正常,但我需要在获取数据之前对其进行过滤
如果我像这样改变body,我会得到一个空数组,问题似乎来自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;
}
“ResourceData.”的结果是异步的:
当数据从服务器返回时,则对象是资源类的实例。。。重要的是要认识到调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,现有引用将填充实际数据
当页面第一次加载时,我猜控制器在从服务器返回数据之前运行,因此第一次调用getData()时,data
可能还没有填充任何数据,因此得到一个空数组
解决问题的一个方法是使用角度过滤器过滤视图/HTML中的数据,而不是在服务中
<div ng-repeat="item in data | filter:myFilter">
{{item.ID}}: {{item...}}
</div>
{{item.ID}:{{item…}
然后在控制器中:
$scope.myFilter = function(item) {
return item.ID <= 10;
}
$scope.myFilter=函数(项){
return item.ID在angular.forEach中放入调试器语句,在控制台中查看加载时的数据。我说…如果将控制台调试放入angular.forEach,则为空数组,忽略forEach..如果我将forEach放在前面或结束,它工作正常,我不知道为什么要这样做,因为如果我直接调用change按钮,它会过滤正常..如果varify for source return true,但在foreach中看起来像null或其他东西。忽略foreachdata可能是一个对象,而不是一个数组…非常感谢您的帮助…我在控制器中创建了过滤器,工作正常!