如何将异步服务中的数据设置到控制器$scope中?
How should I set data from an asynchronous service into a controller $scope?
页面中的所有服务器数据访问都由我的RequestFactory提供程序执行。(RequestFactory使用$http来执行实际的服务器调用。)
我的控制器范围有一个对RequestFactory返回的数据列表的引用。
我的问题是,由于RequestFactory调用是异步的,并且RequestFactory没有(也不应该)访问控制器范围,那么RequestFactory将数据传递给控制器的正确方法是什么?
var requestFactory = {};
angular.module("myApp").factory("RequestFactory", function($http) {
requestFactory.fetch = function() {
$http.get(url).
success(function(data) {
controller.setData(data)
}).
error(function(data, status) {
console.info("fetch Failed. Error code: " + status + " Url:" + url);
}).finally(function() {
controller.setSubmitting(false);
});
};
return requestFactory;
});
您应该返回工厂的承诺。参见下面的代码片段。
.factory("RequestFactory", function($http) {
return {
fetch : function() {
return $http.get(url).then(function(result) {
return result.data;
});
}
}
});
在你的控制器中你应该使用
.controller('MainCtrl', function($scope, RequestFactory) {
RequestFactory.fetch().then(function(data)
$scope.foo = data;
});
});
您可以这样做:
(function(){
function Service($http){
function get(){
//We return a promise
return $http.get('path_to_url');
}
var factory = {
get: get
};
return factory;
}
angular
.module('app')
.factory('Request', Service);
})();
控制器(function(){
function Controller($scope, $q, Request) {
var defer = $q.defer();
//Call our get method from the Request Factory
Request.get().then(function(response){
//When we get the response, resolve the data
defer.resolve(response.data);
});
//When the data is set, we can resolve the promise
defer.promise.then(function(data){
console.log(data);
});
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();
如您所知,$http
服务返回承诺,因此在此之后,您可以轻松地将它们组合在一起。
相关文章:
- 如何通过AngularJS中的一个调用在多个控制器($scope)中插入相同的数据
- 门禁控制器$scope和$route指令
- 如何访问父控制器$scope子控制器中的值
- AngularJS:如何将服务方法分配给控制器$scope和ng-repeat(it)
- 控制器$scope变量在jasmine测试中未定义
- 在指令作用域和控制器$scope之间共享数据
- 尝试从AngularJS中的控制器($scope)将元素插入到视图(HTML)中
- 控制器$scope属性没有更新(套接字连接)
- Angular控制器$scope.fId显示未定义的值
- 从服务传递错误消息到控制器$scope
- 当控制器$scope变量改变时,AngularJS视图没有更新
- 子控制器$scope属性更改没有更新父控制器
- 动态更改控制器$scope变量
- 如何将异步服务中的数据设置到控制器$scope中?
- Angular控制器-scope范围
- 如何在angularJS中初始化控制器$scope变量
- UI角度模态控制器$scope值处理错误
- Angular$scope未按预期工作.正在尝试在控制器$scope和$scope.function作用域中分配对象值
- 即使控制器$scope具有新值,导航部分也不会更新
- 在$promise中使用$broadcast, mocha如何知道事件何时在控制器$scope中触发?