Javascript 使用控制器调用服务时获得两次结果
我正在构建一个简单的控制器,它还包括一个服务。此服务返回一个json。现在,我的问题是,当我通过控制器调用请求函数并打印结果时,我会两次得到所有对象 这就是我现在的代码:Javascript 使用控制器调用服务时获得两次结果,javascript,angularjs,angular-services,angular-controller,Javascript,Angularjs,Angular Services,Angular Controller,我正在构建一个简单的控制器,它还包括一个服务。此服务返回一个json。现在,我的问题是,当我通过控制器调用请求函数并打印结果时,我会两次得到所有对象 这就是我现在的代码: angular.module('clientApp') .factory('RequestService', ['$http', function($http){ function getData() { return $http.get('../../mockdata/dat
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:
我想,问题一定出在成功的某个地方,但我不知道具体原因
我的解决方案:最后,当我在控制器中围绕服务调用包装一个函数时,它对我来说运行良好。仍然在想原因。试着不要从您的服务中退回任何东西
.service('RequestService', ['$http', function($http){
this.getData = function() {
return $http.get('../../mockdata/data.json')
}
}])
// controller
RequestService.getData().success(function(data){
$scope.data = data;
})
若要仅在看到此信息后呼叫服务,请尝试此
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)
});
}]);
您已将服务定义为一个工厂 试试看: 将
.service
更改为.factory
或:
dothis.getData=function(){…}
(正如@user2954587所说)理想情况下,它应该返回单个对象。可能是您从后端获得的JSON有问题嘿,如果我删除这一行,我会得到以下错误:TypeError:RequestService.getData不是new@threxx的函数对不起!更新了答案。需要在服务上设置函数。仍然会出现此错误:this.getData不是function@threxx添加了示例控制器调用,还从
中删除了()
。getData
当我这样做时,仍然会得到双重结果。这太奇怪了。你确定你的json文件只包含一次所有内容吗?我自己写的,它只有四个条目,所以不要认为问题出在json上。把它和工厂联系起来,仍然会得到两个有趣的结果。我打赌控制器被初始化了两次。如果将console.log('hi')
放入控制器中,它是否调用了两次?true!一段时间后修复了:)