2017-10-04 34 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。 –

相關問題