$ rootScope'a bir değişken yükleyen .run() içinde ajax çağrısı var Bu değişken, bir görünümle ilişkili denetleyicide gereklidir.Açısal .controller(), daha önce çalışır. R()
TypeError: sonuçlanan $ rootScope.user.fedUnit içinde bir şey .controller yükleniyor zaman refresh (F5) üzerine Bazen
orada tanımsız
Herhangi malı 'fedUnit' okunamıyor kontrolörün .run() bittikten sonra yüklenmesini geciktirmenin yolu nedir? Bulamıyor gibi görünüyor. Ben $ rootScope kullanmayan
app.run(function($rootScope, $http, $q, SessionFactory, TokenHandler) {
$rootScope.ajaxCall = $q.defer();
token = TokenHandler.getToken();
if (token != null) {
SessionFactory.get({ token : token },
function success(response, responseHeaders) {
$rootScope.user = response;
$rootScope.ajaxCall.resolve();
}
);
}
});
app.controller('UnitController', function($scope, UnitFactory) {
$scope.ajaxCall.promise.then(function() {
$scope.updateUnits = function() {
UnitFactory.query({fedUnit: $scope.user.fedUnit});
}
});
});
:
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) { ...
Çözüm @misterhiller için
$rootScope.foo = $q.defer();
$rootScope.foo.resolve(); when AJAX is done;
$rootScope.foo.promise.then(..) in the controller.
sayesinde
Denetleyicinin yüklenmesinden önce run() 'un gerçekten bitmiş olduğunu hissediyorum - sadece run() işlevi eşzamansız bir çağrı içeriyor gibi görünüyor - Tarayıcı, yürütme ile devam ederken, geri gelene kadar çağrılır ve unutulur Bir sonraki kod kümesinin - denetleyicinizi çağıran süreçte - GET isteği hala (bölünmüş ikinci) döndürülmediğinden ve hatayla sonuçlandığından - SessionFactory hizmetinin kodunu gönderir misiniz? – callmekatootie
Bu çalışmayı senkronize olmayan bir şekilde yapmanız gerekir. AJAX isteğini gerçekleştiren bir yükleyici sağlayıcı oluşturun. – TheHippo
Evet, Sessionfactory, bir tür dinlenme API'sı için basit bir $ kaynak çağrıdır. – fritz