AngularUI 路由器在解析时不重定向

AngularUI Router not redirecting in resolve

谁能给我解释一下,为什么在下面的代码中,$state.go AND $location.path() 都不起作用?

状态

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

RequireLoginService

.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 通知 angulajs 更改,而不会导致“$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;
    }
  }
});

很高兴它解决了问题。