2017-10-04 73 views
0

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

请人给我建议我做了什么错..

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 
     }); 
} 
}); 
+0

您确定没有错误吗?你的错误处理程序是无操作的。另外,你确定为了达到'$ location.path('/ Home')'满足条件响应吗? – Phix

+0

@Phix:是的,符合条件。在我的路由配置中,它始终处于“其他”状态。 –

+0

为什么这么多'redirectTo'? – Phix

回答

0

这个配置:

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

它看起来像你重定向到/Home与预期的一样,但是您的立即重定向到~/Home/Index/,因为这不存在,因此第三个重定向到otherwise块。

编辑

解决您的评论:

但我的页面首页/指数。

哦,对不起。我甚至去除后〜试过,那么也没有工作

我猪头... 是不是在上面的配置定义的路线。

每本航线配置:

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

您从/Home重定向到被称为/Home/Index一个不存在路线,再次,是不是在您发布的配置中定义。

这里是角是说:

`/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不能像这样工作。

+0

我是angularjs的新手,这就是为什么我不能按照你的答案。你能解释一下你的答案吗?那里实际上错了什么?我应该改变什么? –

+0

你在这里说的是“当用户请求去'/ Home'时,将它们重定向到'〜/ Home/Index'由于'〜/ Home/Index'不存在,所以AngularJS遵循'因为你总是碰到默认路径 – Phix

+0

但是我有页面主页/ index。 –