2016-08-30 1 views
0

Мой реальный код немного сложный, поэтому я написал здесь простой, чтобы просто объяснить мой вопрос.Принудительное выполнение для завершения выполнения перед присвоением результатов переменной

В каждом прогоне я хочу получить содержимое HTML-шаблона внутри службы, а затем назначить их переменной в контроллере (или в 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 закончить выполнение перед этим назначением $rootScope.innerHTML = service.gethtml; в перспективе.

ответ

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

По-моему, это нехороший способ сделать это.

+0

Можете ли вы предложить хорошие способы? Идея отверстия заключается в том, что у меня есть JSON-файл объектов, и в каждом прогоне я получаю эти объекты, а также добавляю новое свойство 'innerHtML', чтобы они ссылались на каждый контент шаблона html в моем проекте. Теперь контент может измениться на другой язык, поэтому мне нужен новый контент, поэтому я решил получить его в каждом прогоне. У вас есть хорошие способы, если я очистил свою идею? –

+0

@HalaElBarchah Что значит «каждый пробег»? Какой маршрутизатор вы используете? – krutkowski86

+0

Это ngRouter. Каждый пробег я имею в виду каждый маршрут –

Смежные вопросы