我试图延迟加载其他控制器,直到在我的 MainCtrl 中进行身份验证。
索引.html:
<body ng-app="MyApp" ng-controller="MainCtrl">
...
<div ng-view>
...
</div>
...
</body>
主控件:
var checkAuth = function () {
var deferred = $q.defer();
userAuth.isAuthenticated(
function () {
$rootScope.user = userAuth.user.data;
deferred.resolve();
}, function () {
$rootScope.user = false;
deferred.resolve();
});
return deferred.promise;
};
$scope.$watch('$location.path()', function () {
$rootScope.$on('$locationChangeSuccess', function (event) {
checkAuth();
});
});
我想要的是运行 checkAuth 函数,然后如果用户被授权,则加载部分和控制器。
我已经尝试了类似问题中建议的各种解决方案(延迟 AngularJS 路由更改直到模型加载以防止闪烁,Angular.js 延迟控制器初始化,AngularJS - 防止未经身份验证的用户访问给定路由)但问题是它们都不起作用页面被刷新,或者如果用户是从外部页面到达的。我尝试使用 $locationChangeSuccess 在页面加载时运行身份验证,但部分控制器在加载之前不会等待身份验证运行。
任何人都可以提出更好的解决方案,或者我的方法可能会出错吗?