A有一个Angular JS应用程序,其中包含以下内容:
带有以下内容的运行块以设置当前用户:
的javascript
app.run(function($rootScope, $http){
$http.get("/users/current").success(function(data){
$rootScope.current_user = data;
});
});
我将/ users / current路由设置需要5秒才能解决,以模拟网络状况不佳。
我的应用程序使用ngRouter。有一个叫做“主控制器”的“外部”控制器,里面有ng-view:
HTML
<html ng-app>
<body ng-controller="MainController">
<div ng-view>
</div>
</body>
</html>
内部控制器的代码直到运行块中的promise已经解决后才会执行,所以这有效:
的javascript
app.controller('InnerController', function($scope, $rootScope){
$scope.logged_in_user = $rootScope.current_user.username;
// logged in user is correct
// alert($rootScope.current_user.username); // This will work
});
主控制器的代码在运行块中的promise已经解决之前执行,所以这不起作用:
的javascript
app.controller('MainController', function($scope, $rootScope){
$scope.logged_in_user = $rootScope.current_user.username;
// logged in user is undefined
// alert($rootScope.current_user.username); // This will throw an exception, as current_user is undefined, and you are trying to call the property username on undefined.
});
问题