我的工厂看起来像这样:
.factory('MyFactory', function(){
return: {
someFunction: functon(firstParam, secondParam, resultObject) {
$http.get(url).success(resultObject);
}
}
})
我的控制器看起来像这样:
.controller('MyCtrl', function($scope) {
MyFactory.someFunction(paramOne, paramTwo, function(resultObj) {
$scope.result = resultObj;
console.log($scope.result) //has the object
});
console.log($scope.result) //undefined
}):
我希望$scope.result
在控制器内可用,而不仅仅在回调中。现在它只在回调函数中可用。
我理解这里的问题是,回调函数中变量的范围在函数内结束,我只是不理解如何克服这个问题。
答案 0 :(得分:2)
问题不在于变量的范围在回调函数内,问题是当你在控制器内的函数外部执行console.log($ scope.result)时,$ http请求尚未完成,所以它将是未定义的。
请求完成后,您可以访问控制器中的$ scope.result。解决此问题的最佳方法是确保在控制器加载之前完成$ http请求,这可以通过在路由中使用resolve函数来实现。您可以触发$ http请求并在加载路由之前等待它完成,因此结果可以直接注入控制器。
以下是解释此概念的链接:http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx