2016-08-30 4 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; 
    } 
}) 

、私は、実行中にこの割り当て$rootScope.innerHTML = service.gethtml;前に実行を完了するためにserviceを強制したいです。

答えて

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 'every run'はどういう意味ですか?どのルータを使用していますか? – krutkowski86

+0

これはngRouterです。 すべてのルートはすべてのルートを意味します –

関連する問題