5
$ rootScopeに変数をロードする.run()内にajax呼び出しがあります。 ビューに関連付けられたコントローラでその変数が必要です。角度.controller()は.run()より前に実行されます。
はTypeError:結果としての$ rootScope.user.fedUnit内部の何も.controllerがロードされた時点でリフレッシュ(F5)で時々
ありません未定義
任意のプロパティ「fedUnit」を読み取ることができません.run()が終了するまでコントローラのロードを遅らせる方法はありますか? 見つからないことがあります。機能コードブロックで@misterhillerへ
app.run(function($rootScope, $http, $location, SessionFactory, TokenHandler) {
token = TokenHandler.getToken();
if (token != null) {
SessionFactory.get({ token : token },
function success(response, responseHeaders) {
$rootScope.user = response;
}
);
}
});
app.controller('UnitController', function($scope, $rootScope, $location, UnitFactory) {
$scope.updateUnits = function() {
UnitFactory.query({fedUnit: $rootScope.user.fedUnit}, function success(response, responseHeaders) { ...
ソリューション
$rootScope.foo = $q.defer();
$rootScope.foo.resolve(); when AJAX is done;
$rootScope.foo.promise.then(..) in the controller.
感謝(ツイッター)
コントローラがロードされる前に 'run()'が実際に終了していると感じます - run()は非同期呼び出しを含んでいるようです - ブラウザが実行を続けている間に呼び出され、あなたのコントローラを呼び出しているプロセスでは、GET要求はまだ返ってこなかったので(その分割秒で)、エラーが発生します。 - 'SessionFactory'サービスのコードを投稿できますか? – callmekatootie
これを非同期にする必要があります。 AJAXリクエストをロードするプロバイダを作成します。 – TheHippo
はい、Sessionfactoryは、ある種の残りのAPIに対する単純な$リソース呼び出しです。 – fritz