私は一番上のコントローラを作成する前に約束を解決する方法を理解しようとしています。私はui.routerを使用していますので、異なるルートのコントローラの約束事を解決する方法を知っています。しかし、私は最初のコントローラがロードされる前にそれを解決する方法を知らない。MainControllerの約束を解決します
これは私のindex.htmlの抽出物である:
<html lang="de" x-ng-app="myapp">
<body x-ng-controller="MainController">
...
<div id="header" x-ng-include="'top.html'"></div>
...
<div id="viewDiv" ui-view></div>
...
</body>
</html>
私は今シーズン(およびめったに変化し、他のデータ)をロードするサーバから、それは私のトップをコントローラに注入されています.htmlヘッダーといくつかの私のビューコントローラー。私は私の現在のシーズンをロードし、約束を返すサービスを持っている:
services.factory('RestAccess', function(Restangular) {
return {
loadCurrentSeason : loadCurrentSeason
};
function loadCurrentSeason() {
return Restangular.one('season','current').get();
}
});
そして私は私のメインコントローラに注入し、この関数から解決を約束したいのですが:
controllers.controller('MainController', function($scope, currentSeason, SomeService) {
$scope.season = currentSeason;
$scope.stuff = SomeService.loadStuff(currentSeason);
});
は、どのように私は設定できますがこの? これはbody-elementを担当するコントローラ用です。だから私はまだここでルーティングを使用していません。
私は
resolve: {
currentSeason : function(RestAccess) {return RestAccess.loadCurrentSeason();}
}
のようなものが欲しいしかし、私はこれをどこに置くか分かりません。
コンテンツを解決して非表示にしたり、いくつかの 'ng-if =" currentSeason "などで何かしたいという約束を待っているのはなぜですか?約束を待ってから、あるinit()内のパラメータで解決された値を渡すことでコントローラを呼び出すラッピングディレクティブを持つこともできます。loadCurrentSeason.then(function(currentSeason){$ scope.currentSeason = currentSeason;}) " 方法。 – floribon
コンテンツを隠すことではありません。これは、この引数を必要とするサービスメソッドを呼び出すことに関するものです。もし私がちょうど少数のコントローラに入っていたら、私はあなたの提案について行くつもりです。しかし、私は数十のコントローラにこの値が必要です。 – EasterBunnyBugSmasher
あなたのサービスは価値のあるものではなく約束を消費することができます。それは約束のアイデアです:それらを通常の値として操作し、必要なときには「then」を登録します。または、今シーズンの事柄が非常に特殊なものであれば、アプリケーションを起動する前に最初にロードしてから、 'angular.bootstrap(...)'を使ってコンパイルを開始することができます – floribon