Angular http调用一次,并在所有控制器中可用

时间:2014-12-04 10:17:16

标签: angularjs angularjs-routing

我需要在加载所有模板之前调用http服务一次(使用ui-routing),并且所有控制器都可以返回数据,这可能吗?

$http.get('localhost;8080/some.json').then(function(d) {
  return d;
};

1 个答案:

答案 0 :(得分:1)

如果您想要运行一次并使其可供所有控制器使用,请创建一项服务,例如CoreData,然后从app.run()调用,如下所示

app.factory('CoreData',function($http) {
  var data, defer;
  return {
    load: function() {
      defer = $http.get('localhost;8080/some.json');
    },
    get: function() {
        return defer;
    }
  };
})
.controller('CtrlA',function(CoreData) {
   $scope.foo = CoreData.get();
})
.controller('CtrlB',function(CoreData) {
   $scope.foo = CoreData.get();
})
.run(function(CoreData) {
   CoreData.load();
});

如果您担心时间问题,可以在.get()上使用单一方法执行上述CoreData作为承诺。

为了处理加载,我们只返回$http承诺,当解析时会自动填充角度。