使用AngularJS重定向到新页面

时间:2017-02-13 17:33:04

标签: javascript angularjs

我正在尝试使用MEAN开发一个带登录系统的网页。我正在开发前端。服务器正在启动并且index.html正在正确加载,但是在成功登录后我遇到了重定向到另一个页面的问题。我尝试使用$ state.go,但是我需要完全加载一个新页面,我尝试过使用$ window.location.href,但是它没有用,而且我的URL很乱。

我的index.html基础href是“/”

我的登录控制器:

var app = angular.module('SantaUTIApp', []);
app.controller('loginCtrl', function($scope, $window, $timeout) {


    $scope.showGreeting = false;
    var link = "https://" + $window.location.host + "/home";
    $scope.showInvalidUserPasswordMessage = function() {
        $scope.msg="Usuario e/ou Senha inválidos.";
        $scope.showGreeting = true;
        $timeout(function(){
            $scope.showGreeting = false;
        }, 10000);
    };

    $scope.login = function(){
        if($scope.user === '1' && $scope.password === '2')
            $window.location=link;
        else
            $scope.showInvalidUserPasswordMessage();
    };

});

我的角度路线档案:

var app = angular.module('SantaUTIApp', ['ui.router']);

app.config(function($stateProvider, $locationProvider, $urlRouterProvider){

    $stateProvider
        .state('login',{
            url:'/',
            templateUrl: 'views/index.html',
            controller: 'loginCtrl',
        })
        .state('home',{
            url: '/home',
            controller: 'homeCtrl',
            templateUrl: 'views/home/home.html'
        });

    $locationProvider.html5Mode(true);
});

成功登录后,我想转到我的主页。这是最好的方法吗?拜托,我已经尝试了一切。

1 个答案:

答案 0 :(得分:1)

为了重定向正确的用法是

$window.location.href=link;

以下是更多选择:

1。如果您在服务中保存了登录状态并且不想重新加载所有SPA,请使用$ location,因为它不会导致浏览器URL重新加载整页改变了。要在更改URL后重新加载页面,请使用较低级别的API $ window.location.href。

var app = angular.module('SantaUTIApp', []);
app.controller('loginCtrl', function($scope, $location, $timeout) {


  $scope.showGreeting = false;
  var link = $location.protocol() + $location.host() + '/home';
  $scope.showInvalidUserPasswordMessage = function() {
    $scope.msg="Usuario e/ou Senha inválidos.";
    $scope.showGreeting = true;
    $timeout(function(){
        $scope.showGreeting = false;
    }, 10000);
  };

  $scope.login = function(){
    if($scope.user === '1' && $scope.password === '2')
        $location.path(link);
    else
        $scope.showInvalidUserPasswordMessage();
  };

});

2. 此外,您还可以使用$状态的Angular路由。

在控制器中用$ state替换$ window,然后在需要重定向时,执行此操作。作为$ location,不会进行整页重新加载。

$state.go('home');

注意: 如果您仍在使用$ window,请将其包装在超时时间内。

$timeout(function() {
  $window.location.href= link;
});