如何在不加载angularjs中的当前页面的情况下重定向到另一个页面

时间:2017-04-25 08:14:17

标签: angularjs node.js mean-stack

我想在不加载当前页面的情况下重定向到另一个页面。

让我解释一下我的任务。我有用户登录条件。

如果用户没有登录并且他试图直接输入URL EX(" localhost / sample.html")意味着它将进入登录页面。对我来说,这种情况很有效。

首先打开sample.html页面,然后只有它会重定向到登录。用户可以在sample.html中查看数据。

var logincheck = function () {
    debugger;
    $http.get('loggedin').success(function (user) {
        alert(user);
        // Authenticated
        if (user != '0') {
            refresh();
            return;

        }
            // Not Authenticated
        else {
            $window.location.href = '/';
        }
    });
};
logincheck();

有没有办法在不加载sample.html页面的情况下进入登录页面。

3 个答案:

答案 0 :(得分:0)

有趣的方法是在$route event中检查此条件。例如,您可以在app.run

中编写此代码
$rootScope.$on('$routeChangeStart', function(event, next, current) {
    if(next.$$route && userNotAuthenticated) {
        $location.href('/');
    }
});

优势在于它适用于您的整个应用,您不必为每个页面编写代码。

答案 1 :(得分:0)

在主控制器(附加到索引的控制器)中,您应该进行登录检查并将变量设置为true / false。在您的控制器中检查此变量,如果用户未登录,则执行$ state.go()。

在附加主控制器的索引文件中使用ng-cloak指令,如:

<body ng-controller="mainController" ng-cloak>

您可以阅读ng-cloak here

答案 2 :(得分:0)

这就是你如何做到的。

每当您的角应用程序启动时,它都会运行run功能。因此,在该函数中附加位置更改侦听器,如下所示

App.run(['$rootScope', '$http', '$urlRouter', function($rootScope, $http, $urlRouter) {
  $rootScope.$on('$locationChangeSuccess', function(event) {
    event.preventDefault();// prevents the location change
    $http({// make a http call to check if user is logged in or not.
      url: '/path/to/check/auth',
      method: 'post',
      data: {}
    }).then(function(response){
      if(response.data.isUserLoggedIn){//If user is logged in.
        $urlRouter.sync();
      }else{//user is not logged in
        window.location.assign('/login');
      }
    }, function() {
      window.location.assign('/login');
    });
  });
  $urlRouter.listen();
}]);