以角度方式访问工厂外部的回调函数内的变量

时间:2014-06-27 03:02:02

标签: javascript angularjs ionic-framework

我的工厂看起来像这样:

.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在控制器内可用,而不仅仅在回调中。现在它只在回调函数中可用。

我理解这里的问题是,回调函数中变量的范围在函数内结束,我只是不理解如何克服这个问题。

1 个答案:

答案 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