使用控制器调用service时获得两次结果
Getting results twice when calling service with controller
我正在构建一个简单的控制器,其中还包括一个服务。这个服务返回一个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
我想,问题一定是在成功的某个地方,但是我找不到具体的原因。
我的解决方案:最后,当我在控制器中的服务调用周围包装一个函数时,它对我来说工作得很好。
尽量不要从你的服务返回任何东西。
.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
或:
do this.getData = function () { ... }
(如@user2954587所说)
理想情况下,它应该返回单个对象。可能从后端获取的JSON有问题
相关文章:
- Meteor Router数据函数被调用两次
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 为什么两次运行完全相同的正则表达式的结果不同
- 需要点击两次按钮才能获得搜索结果
- Algolia Magento扩展:由于非画布菜单而渲染两次,不使用Algolias结果页
- 为什么 “g” 修饰符在调用 test() 两次时给出不同的结果
- onClick需要两次点击才能填充结果HighCharts
- 使用控制器调用service时获得两次结果
- 一键返回两次结果
- Javascript>将结果形成为";记住";用户>避免两次展示形式
- AngularJS需要执行两次函数才能显示结果