angularjs $ location.path(' / home')没有重定向到视图

时间:2017-10-04 15:44:00

标签: javascript angularjs

我正在使用MVC应用程序中的登录身份验证。我正在努力解决这个问题。登录成功后,我想重定向到主页,但我的代码$ location.path(' / home')什么都不做。后来我发现它始终是我的默认路径,它在app.js中的routeprovider中给出。

请有人建议我犯了什么错误..

app.js

var app = angular.module('myApp', [
"toastr",
"ui.bootstrap",
"ngRoute",
"datatables",
"ngMaterial",
"ngMessages",
"material.svgAssetsCache"
]);

app.config(["$routeProvider", "$locationProvider",
function ($routeProvider, $locationProvider) {
    console.log('$routeProvider' + JSON.stringify($routeProvider));
    console.log('$locationProvider' + $locationProvider);
    //return
    $routeProvider.when("/login",
        {
            redirectTo: "/login"
        }).when("/Home",
        {
            redirectTo: "~/Home/Index/"
            //controller: "MyCtrl"
        }).when("/user",
        {
            redirectTo: "/User/"
        }).when("/adduser",
        {
            redirectTo: "/User/User"
        }).when("/role",
        {
            redirectTo: "/Role/"
        }).when("/addrole",
        {
            redirectTo: "/Role/AddRole"
        }).when("/settings",
        {
            redirectTo: "/Settings/"
        }).when("/Editsettings",
        {
            redirectTo: "/Settings/Edit/"
        }).when("/uploadData",
        {
            redirectTo: "/UploadDataFile/"
        }).otherwise(
        {
            redirectTo: '/Test/Index'
        });
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    }).hashPrefix('!'); //Remove the '#' from URL.   
}])

Login.js

app.controller('LoginCtrl', function ($scope, $location, $http, $window) {
$scope.ddlDomain = [ 'AS', 'EU', 'LA'];
$scope.Domain = $scope.ddlDomain[0].value;

// send to your controller
$scope.LoginClick = function () {
    var User = {
        UserId: $scope.UserId,
        Password: $scope.Password,
        Domain: $scope.Domain
    }

    $http({
        method: "post",
        url: "/Login/SSOLogin",
        data: { 'user': User }
    }).then(function (response) {

        if ((response.data.Message == "") || (response.data.Message == null)) {                               
            $location.path('/Home');

            if (!$scope.$$phase) {
                //$digest or $apply
                $scope.$apply();    
            }
        } else {
            $scope.errormsg = response.data.Message;
        }
        // handle success here
    }, function (response) {
        console.log("err" + response.data);
            // handle error here
        });
}
});

1 个答案:

答案 0 :(得分:0)

此配置:

$routeProvider
  .when("/login", {
    redirectTo: "/login"
  })
  .when("/Home", {
    redirectTo: "~/Home/Index/"
    //controller: "MyCtrl"
  })

您似乎正在按预期重定向到/Home,但您会立即重定向到~/Home/Index/,这不存在,因此第三次重定向到您的otherwise

修改

发表评论:

  

但我有主页/索引页面。

     

哦,对不起。我已经尝试过删除〜,然后也没有工作

我的家伙... /Home/Index/不是上述配置中定义的路线。

根据此路线配置:

$routeProvider.when("/Home", {
    redirectTo: "~/Home/Index/"
    //controller: "MyCtrl"
})

您正在从/Home重定向到名为/Home/Index不存在的路由,该路由再次未在您发布的配置中定义。

这是Angular所说的:

`/Home` => 
    "Ok, when the user hits this route, 
    I need to redirect them to `/Home/Index` because 
    that's what I was told to do." 
`/Home/Index` => "Hmm, I don't see that route configured. Exiting. 
 => Fall back to my `otherwise` block."

你说

  

但我有主页/索引页面。

这是什么意思?您在名为“Home”的目录中有一个名为“index”的文档? AngularJS不会像这样工作。