Angular重定向不起作用

Angular redirection not working

本文关键字:不起作用 重定向 Angular      更新时间:2023-09-26

我确信这已经回答了一千次,但我不明白为什么我只能在搜索数小时后使用window.location.href重定向。这是怎么呢

angular.module(..., [])
.config([..., function(...) {
        /* Route Provider and ngRoute reference removed as per comment below */
         $stateProvider
            .state('login', {
                url : '/login',
                controller: 'loginCtrl',
                templateUrl: '/login'
            })
            .state('home', {
                url: '/',
                templateUrl: '/views/index',
                controller: 'HomeCtrl'
            });
        $locationProvider.html5Mode(true);
    }
])
   .run(['$state',  '$rootScope', function ($state, $rootScope) {
    $rootScope.$on('$stateChangeStart', function (e, toState, toParams, fromState, fromParams) {
            if ($rootScope.username == null || $rootScope.password == null) {
                if (toState.templateUrl == "/login") {
                } else {
                        event.preventDefault();
                        $state.go("login");
                }
            }
        });
    }
]);

Update: StateChangeStart被调用两次,第二次使用登录状态。控制台中没有抛出错误。我对angular很陌生,所以如果我做错了什么,我愿意接受任何建议。如果你需要任何额外的代码(例如:控制器,服务),请告诉我,我会发布它。

然而,在显示欢迎页面时,即使用户名和密码为空,它仍停留在欢迎页面上。在浏览器中输入/login可以正常工作

根据Angular的$location。路径不工作:

                /* snip */ else {
                    $rootScope.$apply(function () {
                        $location.path('login');
                    });
                } /* snip */

显示错误:$digest already in progress .

更多细节:我刚发现如果我去掉$locationProvider.html5Mode(true);线,加载页面时不调用stateChangeStart。服务器是ASP.Net。

编辑2 看起来angular实际上是在获取登录页面,但不知道把它放在哪里?

在angular use的run函数中:

$rootScope.$on('$stateChangeStart', function (event, toState) {
    if (toState.name != 'login') {
        $state.go('login');
        event.preventDefault();
    }
});

只使用stateProvider来设置路由。

按照这里的指导使用AngularJS html5mode和nodeJS和Express

或在apache:

https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/

为了正确设置html5 pushstate为angular js上的节点(如果这是你在服务器上使用)

点击这里阅读我写的关于身份验证问题的文章,或多或少会对您有所帮助。