Javascript 使用AngularJS重定向到新页面

Javascript 使用AngularJS重定向到新页面,javascript,angularjs,Javascript,Angularjs,我正试图开发一个网页与平均登录系统。我先开发前端。服务器正在启动,index.html正在正确加载,但在成功登录后,我无法重定向到另一个页面。我试过使用$state.go,但我需要完全加载新页面,我试过使用$window.location.href,但它不起作用,我的URL乱七八糟 My index.html基本href为“/” 我的登录控制器: var app = angular.module('SantaUTIApp', []); app.controller('loginCtrl', fu

我正试图开发一个网页与平均登录系统。我先开发前端。服务器正在启动,index.html正在正确加载,但在成功登录后,我无法重定向到另一个页面。我试过使用$state.go,但我需要完全加载新页面,我试过使用$window.location.href,但它不起作用,我的URL乱七八糟

My 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);
});

成功登录后,我想进入我的主页。哪种方法最好?拜托,我什么都试过了

为了重定向正确的用法是

$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。此外,还可以使用角度布线的$state

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

$state.go('home');
注意: 如果您仍然希望使用$window,请将其包装为超时

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

您必须将window.location.href与您想去的地方的完整url一起使用。这是一个选择。另一种方法是使用嵌套状态,因此您将“login”作为基本状态,一旦用户登录,您就将其发送到“app.xxx”(app.index、app.edit等);使用$location.path(“/home”),我得到了URL:并且页面没有改变。使用$window.location,我得到了URL:,并且出现了一个错误,无法获取/home/。忽略引号您可以使用
window.location.hash=“/home”
请添加一些解释,说明此代码为何/如何帮助OP。这将有助于提供未来观众可以学习的答案。有关更多信息,请参阅。