AngularUI路由器在解析中未重定向

AngularUI Router not redirecting in resolve

本文关键字:重定向 路由器 AngularUI      更新时间:2024-06-30

有人能向我解释为什么在下面的代码中,$state.goAND$location.path()都不起作用吗?

状态

.state('sheet', {
        url: "/",
        templateUrl: "views/sheet.html",
        controller: 'SheetCtrl',
        resolve:
        {
            loginRequired:
                function(RequireLoginService) {
                    return RequireLoginService.loginRequired();
                }
        }
    })

需要登录服务

.service('RequireLoginService', function (event, $state, $q, UserService) {
    return {
        loginRequired: function () {
            var deferred = $q.defer();
            if (!UserService.isLogged) {
                event.preventDefault();
                $state.go('login');      // or $location.path('/login');
                deferred.reject();
            } else {
                deferred.resolve()
            }
            return deferred.promise;
        }
    }
  });

您需要使用$timeout通知angularjs更改,而不会导致"$digest already in progress"。

.service('RequireLoginService', function (event, $state, $timeout, $q, UserService) {
return {
    loginRequired: function () {
        var deferred = $q.defer();
        if (!UserService.isLogged) {
            event.preventDefault();
            $timeout(function(){
              $state.go('login');      // or $location.path('/login');
            });
            deferred.reject();
        } else {
            deferred.resolve()
        }
        return deferred.promise;
    }
  }
});

我很高兴它解决了这个问题。