我需要在加载所有模板之前调用http服务一次(使用ui-routing),并且所有控制器都可以返回数据,这可能吗?
$http.get('localhost;8080/some.json').then(function(d) {
return d;
};
答案 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
承诺,当解析时会自动填充角度。