我的真实代码有点复杂,所以我在这里写的只是简单的解释我的问题。
在每次运行中,我想在服务中获取HTML模板内容,然后将它们分配给控制器中的变量(或Ecto.Changeset.cast/3
)。跟踪代码后,我注意到服务在run
之后执行完毕。
.run
换句话说,我想在运行中angular.module("app",[])
run(function( $rootScope, service){
var modules = {"a":{"name":"a"},"b":{"name":"b"}.....}
$rootScope.innerHTML = service.gethtml(modules);
})
.controller("main", function($scope,service){
})
.service("service", function($http){
this.gethtml = function(modules){
var obj = {};
angular.forEach(modules,function(module)){
var template = "path/to/html";
var innerHTML="";
$http.get(template)
.success(function(data){
module.innerHTML = data;
})
.error(function(data, status) {
});
//return innerHTML;
}
return modules;
}
})
之前强制service
完成执行。
答案 0 :(得分:1)
你需要回报承诺。
angular.module("app",[])
run(function( $rootScope, service){
service.gethtml().then(function(data){
$rootScope.innerHTML = data;
});
})
.controller("main", function($scope,service){
})
.service("service", function($http, $q){
this.gethtml = function(){
var d = $q.defer();
var template = "path/to/html";
$http.get(template)
.success(function(data){
d.resolve(data);
})
.error(function(error) {
d.reject(error);
});
return d.promise;
}
});
在我看来,这不是一个很好的方法。