如何从AngularJS控制器重定向到快速路线?

如何从AngularJS控制器重定向到快速路线?,angularjs,express,mean-stack,Angularjs,Express,Mean Stack,我正在使用MEAN.io中的样板堆栈,发现它是一个很好的起点,但是我在混合不同的路由命令时遇到了问题。我的应用程序将有一个简单的登录页面,这是公开的,其他一切都隐藏在后面。我可以检查用户是否通过了身份验证,没有问题,但我一生都无法从服务器加载登录页面。我已经在我的html页面上有了一个登录按钮,可以调用正确的路由。一点问题都没有,我只是不能从代码中做同样的事情 $location.path('/signin');代码不会调用服务器,因为它会在路径中留下散列 我的角度控制器 angular.mod

我正在使用MEAN.io中的样板堆栈,发现它是一个很好的起点,但是我在混合不同的路由命令时遇到了问题。我的应用程序将有一个简单的登录页面,这是公开的,其他一切都隐藏在后面。我可以检查用户是否通过了身份验证,没有问题,但我一生都无法从服务器加载登录页面。我已经在我的html页面上有了一个登录按钮,可以调用正确的路由。一点问题都没有,我只是不能从代码中做同样的事情

$location.path('/signin');代码不会调用服务器,因为它会在路径中留下散列

我的角度控制器

angular.module('tms.tweets').controller('TweetsController', ['$scope', '$routeParams',
'$location', '$resource', 'Global', 'Tweets', function ($scope, $routeParams, $location,
$resource, Global, Tweets) {
$scope.global = Global;

$scope.find = function() {

    if(Global.authenticated){

        console.log(Global.authenticated);

        Tweets.query(function(tweets) {
            console.log("Tweets at Angular Controller: " + tweets.length);

            $scope.tweets = tweets;
        });
    }
    else{
        console.log("Unauthorized");

        $location.path('/signin');
    }

};
}]);

找到重定向问题的答案后,我将$location.path替换为

$window.location.href = '/signin';

出于我的目的,调用
$window.location.href='/newpath'不工作

如果需要在控制器中重新加载,我一直在使用以下函数:

    $scope.changeRoute = function(url, forceReload) {
        $scope = $scope || angular.element(document).scope();
        if(forceReload || $scope.$$phase) { // that's right TWO dollar signs: $$phase
            window.location = url;
        } else {
            $location.path(url);
            $scope.$apply();
        }
    };
那么你会这样称呼它:

    $scope.changeRoute('#/newpath');

我想说的是,应该避免这样做,最好在应用程序的配置阶段添加一个运行阶段。您可以在此处阅读有关将运行阶段添加到应用程序配置的更多信息:

即使您不使用MEAN,也可以使用相同的机制。更好的标题是什么“如何从AngularJS中更改窗口位置?也许,也许不是,希望有了这个页面,谷歌会解决它。如果使用$route并想重定向到不同的路由,请使用$window.location.href='#/sign';当另一个答案的方法不起作用时,这就起了作用@然而,德雷特的警告值得注意。