angularjs $location.path('/home') не перенаправляется на просмотр

Я работаю над аутентификацией входа в свое приложение MVC. Я так долго пытаюсь с этой проблемой. После успешного входа в систему я хочу перенаправить на домашнюю страницу, но мой код $location.path('/home') ничего не делает. А позже я обнаружил, что он всегда идет по моему пути по умолчанию, который указан в моем провайдере маршрутов в 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.   
}])

Логин.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
        });
}
});

person Reshu S    schedule 04.10.2017    source источник
comment
Вы уверены, что ошибок нет? Ваш обработчик ошибок не работает. Кроме того, вы уверены, что условие ответа выполнено, чтобы попасть в $location.path('/Home')?   -  person Phix    schedule 04.10.2017
comment
@Phix: да, условие ответа выполнено. В моем routeconfig он всегда попадает в другое условие.   -  person Reshu S    schedule 05.10.2017
comment
Почему так много redirectTo?   -  person Phix    schedule 05.10.2017
comment
@Phix, в зависимости от разных условий мне приходится перенаправлять на разные страницы. вот почему? Даже когда я использовал templateurl, это не сработало.   -  person Reshu S    schedule 05.10.2017


Ответы (1)


Этот конфиг:

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

Похоже, вы перенаправляете на /Home, как и ожидалось, но вы сразу же перенаправляете на ~/Home/Index/, которого не существует, таким образом, третье перенаправление на ваш блок otherwise.

Изменить

Обращение к вашим комментариям:

Но у меня есть страница Home/index.

Ой, простите. Я пробовал даже после удаления ~, тогда тоже не работает

Чувак... /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.

Что ты этим имеешь ввиду? У вас есть документ с именем index внутри каталога Home? AngularJS так не работает.

person Phix    schedule 05.10.2017
comment
Я новичок в angularjs, поэтому я не мог следовать вашему ответу. не могли бы вы объяснить свой ответ? Что там на самом деле не так? что я должен изменить? - person Reshu S; 05.10.2017
comment
Здесь вы говорите, что когда пользователь запрашивает переход на /Home, перенаправляйте его на ~/Home/Index. Поскольку ~/Home/Index не существует, AngularJS использует блок otherwise, поэтому вы всегда выбираете путь по умолчанию. - person Phix; 05.10.2017
comment
Но у меня есть страница Home/index. - person Reshu S; 05.10.2017
comment
Не в соответствии с тем, что вы написали. ~ не является допустимым символом для маршрутизации, а /Home/Index/ не определен в ваших маршрутах. - person Phix; 05.10.2017
comment
Ой, простите. Я пробовал даже после удаления ~, тогда тоже не работает - person Reshu S; 06.10.2017