【发布时间】:2013-08-24 20:10:51
【问题描述】:
我会以这样一个事实作为开头,我真的不知道这是否是实现我正在做的事情的最佳方式,并且我非常愿意接受更好的建议。
我有一个使用OAUTH2 的用户帐户系统,它在我的数据库中查找用户信息并将其保存为变量$rootScope.userInfo。这驻留在附加到我的应用程序的body 的控制器中;在这里,我认为最高级别的控制器会先于其中的控制器加载,但显然不是。
如果我在我的mainCtrl 有机会从我的数据库中加载它之前加载一个尝试访问这个$rootScope.userInfo 对象的视图,它会引发一个javascript 错误并且Angular 中断。
作为参考,这里有一个模板的粗略想法:
<body ng-controller="mainCtrl">
<header>Content</header>
<div class='main-view' ng-controller="userProfile">
<p>{{user.name}}</p>
<p>{{user.email}}</p>
</div>
</body>
我正在像这样在mainCtrl 中加载$rootScope.userInfo:
$http.get('/api/users/' + $cookies.id).
success(function(data) {
$rootScope.userInfo = data.user[0];
console.log("User info is:");
console.log($rootScope.userInfo);
$scope.status = 'ready';
});
那么对于我的userProfile 控件,我会这样做:
function userProfile($scope, $cookies, $http, $routeParams, $rootScope){
if($scope.status == 'ready'){
$scope.user = $rootScope.userInfo;
console.log("Double checking user info, here it is:");
console.log($rootScope.userInfo);
}
}
如果我来自应用程序中不调用$rootScope.userInfo 的其他页面,API 有足够的时间查找它,我的userProfile 页面工作正常。但是,如果进行整页刷新,$rootScope.userInfo 没有时间加载,我会收到错误。
我该如何解决这个问题?
【问题讨论】:
标签: javascript angularjs