如何根据angularjs中的条件切换网址?

时间:2015-11-02 11:54:32

标签: javascript angularjs angular-ui-router

现在我正在处理angularjs和我是新手。我一直在为每个$ http请求和网址更改进行身份验证。因此,我已经实现了URL更改身份验证的代码和平

/** Main Login submit **/    
$scope.submit = function() {
    console.log("enter login submit");
    $scope.submitted = true;
    if (!$scope.loginForm.$invalid) {
        $scope.login($scope.credentials);
    } else {
        $scope.error = true;
        $scope.error_des = '';
        return;
    }
};

//enter code here

/** checking after loggedin in each url **/
if ($window.sessionStorage["userInfo"]) {
        var credentials = JSON.parse($window.sessionStorage["userInfo"]);
        $scope.login(credentials);
};

/** Common login **/
$scope.login = function(credentials) {

    $scope.error = false;
    Auth.login(credentials, function(user) {
        //success function
        $mdDialog.hide();
        $state.go("admin-panel.default.home");
    }, function(err) {
        console.log("error");
        $scope.error_des = err.msg;
        $scope.error = true;
    });
};

一切都按照我的预期运作,但在重新编码同一页面时,它总是会重定向到主页(http://localhost:3000/#/home).i知道它是因为

而发生的
$state.go("admin-panel.default.home");

我的问题是如何以及在何处给出在重新加载时加载相同页面的条件?

1 个答案:

答案 0 :(得分:0)

也许,您的app.js文件中没有登录状态。 因此,当您在登录页面并刷新时,您将在主页上重定向。 如果这不是你的问题,请不要阅读我的其余部分。

所以,下面我展示了我的app.js的片段,我在那里有我的所有状态(我的菜单重定向),最后我使用$ urlRouterProvider.otherwise函数在登录屏幕中重定向用户,如果他们没有登录。

例如,如果我的用户处于登录状态,无论他重新加载页面多少次,他都会一直停留在登录页面上。

我使用这些模块 $ stateProvider,$ urlRouterProvider,$ locationProvider 而不是angularjs的默认 $ route

在我的不同状态之后,我添加$urlRouterProvider.otherwise('/login');作为最后一个选项,以确保他找不到任何其他隐藏或遗忘的网址。

angular.module('MainApp')
.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
    $stateProvider            
        .state('floorplan', {
            url: '/floorplan/:activeEventId',               
            template: '......',
            onEnter: function () {
               //write code when you enter that state
            },
            onExit: function () {
            //write code when you change state
            }
        })
        .state('seating', {
            url: '/seating',
            template: '<div>Seating is under construction</div>'
        })
        .state('event_details', {
            url: '/event/details',
            template: '<div>Event details is under construction</div>'
        })
        .state('reports', {
            url: '/reports',
            template: '<div>Reports is under construction</div>'
        })
        .state('login', {
            url: '/login',
            controller: 'LoginCtrl',
            templateUrl: '/assets/modules/login/login.html',
            onEnter: function () {
             //write code when you enter that state
            },
            onExit: function () {
            //write code when you exit that state
            }
        });
    $urlRouterProvider.otherwise('login'); //when no route found redirect to login
});

我希望有所帮助,祝你好运。