在将结果分配给变量之前强制服务结束执行

时间:2016-08-30 08:00:20

标签: angularjs

我的真实代码有点复杂,所以我在这里写的只是简单的解释我的问题。

在每次运行中,我想在服务中获取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完成执行。

1 个答案:

答案 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;  
  }
});

在我看来,这不是一个很好的方法。