角度重定向无法正常工作

时间:2015-09-02 09:46:16

标签: javascript angularjs

我确定已经回答了一千次,但我无法弄清楚为什么我只能在搜索后使用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");

                }
            }
        });
    }
]);

更新:StateChangeStart被调用两次,第二次是登录状态。控制台中没有抛出任何错误。我对角度很新,所以如果我做了一些严重错误的话,我可以接受任何建议。如果您需要任何其他代码(例如:控制器,服务),请告诉我,我会发布它。

但是,在显示欢迎页面时,即使用户名和密码为空,它仍会保留在欢迎页面上。在浏览器中输入/login可按预期工作。

根据Angular $location.path not working

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

给我一​​个错误:$digest already in progress

更多详情: 我刚刚发现,如果删除$locationProvider.html5Mode(true);行, 加载页面时不调用stateChangeStart。 服务器是ASP.Net。

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

2 个答案:

答案 0 :(得分:0)

在角度使用的运行功能中:

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

仅使用stateProvider设置路线。

按照此处的指导using AngularJS html5mode with nodeJS and Express

或在apache上:

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

为了在节点上正确设置角度js的html5 pushstate(如果那就是你在服务器上使用的那些)

答案 1 :(得分:0)

Click here并阅读我为验证问题所写的内容,或多或少是您可以发现有用的东西。