我正在构建一个简单的控制器,它还包含一个服务。此服务返回一个json。现在,我的问题是,当我通过控制器调用请求函数并打印出结果时,我得到所有对象两次。
所以现在这是我的代码:
angular.module('clientApp')
.factory('RequestService', ['$http', function($http){
function getData() {
return $http.get('../../mockdata/data.json')
}
return {
getData: getData
};
}])
.controller('MainCtrl', ['RequestService', function(RequestService) {
var data = [];
RequestService.getData()
.success(function(allData) {
data = allData[0];
console.log(allData)
})
}]);
json:http://pastebin.com/dTcNDQeA
我猜,问题必须在.success附近,但我不知道具体原因。
我的解决方案:最后,当我在控制器中围绕服务调用包装函数时,它对我来说很好。还在搞清楚,为什么。
答案 0 :(得分:2)
尽量不要从您的服务中退回任何内容。
.service('RequestService', ['$http', function($http){
this.getData = function() {
return $http.get('../../mockdata/data.json')
}
}])
// controller
RequestService.getData().success(function(data){
$scope.data = data;
})
只有在看到此example
后才能调用该服务答案 1 :(得分:1)
试试这个
angular.module('clientApp')
.service('RequestService', ['$http', function($http){
var getData = function (handler) {
$http.get('../../mockdata/data.json').success(handler)
}
return {
getData: getData
};
}])
.controller('MainCtrl', ['RequestService', function(RequestService) {
var data = [];
RequestService.getData(function(allData) {
data = allData[0];
console.log(allData)
});
}]);
答案 2 :(得分:0)
您已将服务定义为工厂。
尝试:
将.service
更改为.factory
或:
做this.getData = function () { ... }
(如@ user2954587所说)
答案 3 :(得分:0)
理想情况下,它应该返回单个对象。可能是你从后端获得的JSON有问题