1

我试图延迟加载其他控制器,直到在我的 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 在页面加载时运行身份验证,但部分控制器在加载之前不会等待身份验证运行。

任何人都可以提出更好的解决方案,或者我的方法可能会出错吗?

4

0 回答 0