gpt4 book ai didi

angularjs - Angular .controller() 在 .run() 之前运行

转载 作者:行者123 更新时间:2023-12-04 18:09:48 25 4
gpt4 key购买 nike

我在 .run() 中有一个 ajax 调用,它将一个变量加载到 $rootScope
在与 View 关联的 Controller 中需要该变量。

有时在 .controller 加载时刷新(F5),$rootScope.user.fedUnit 内没有任何内容,导致:

TypeError:无法读取未定义的属性“fedUnit”

有什么方法可以延迟加载 Controller 直到 .run() 完成?
好像找不到

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.

感谢@misterhiller(推特)

最佳答案

功能代码块的解决方案:

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

我不在 Controller 中使用 $rootScope 。

关于angularjs - Angular .controller() 在 .run() 之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com