2016-06-22 6 views
0

Я создаю страницу входа, где пользователь имеет 2 роли, то есть ученик или библиотекарь. Когда пользователь вводит свои учетные данные и нажимает кнопку «Отправить», вызывается функция проверки.Угловая маршрутизация не работает должным образом

Теперь

Проблемы Я облицовка:

Маршрутизация не работает, т.е. управление доходит до готовности («успешный вход»); и входит в if ($ scope.roles [i] .role === "student") { , но не перенаправляет страницу на $ location.path ('/ home/student');

страница URL Войти, как показано ниже:

http://localhost:63342/LabguideExamples/Assignment/Day4/Login.html?_ijt=oa5emr702cenehrs4oosarmg0d

URL-адрес после успешного входа в систему, как показано ниже.

http://localhost:63342/LabguideExamples/Assignment/Day4/Login.html?_ijt=oa5emr702cenehrs4oosarmg0d#/home/student

URL-адрес по-прежнему имеет login.html и не заменяется 'ViewBooks_Student.html', согласно app.js.

Любая помощь очень ценится.

Благодаря

controller.js

var Controllers = angular.module('Controllers', ['ngRoute']); 
Controllers.controller('LoginCtrl', ['$scope','$http','$location', 
function ($scope,$http,$location) { 
    $scope.validate=function() 
    { 
     $http.get('data/roles.json').success(function(data) { 
      $scope.roles = data; 

     var count=0; 
      for (var i = 0, len = $scope.roles.length; i < len; i++) { 
if ($scope.username === $scope.roles[i].username && $scope.password === $scope.roles[i].password) { 
        alert("login successful"); 
        count = count + 1; 
        if ($scope.roles[i].role === "student") { 
         $location.path('/home/student'); 
         break; 
        } 
        else { 
         $location.path('/home/librarian'); 
         break; 
        } 

       } 
      } 

     if(count!=1) 
     { 
      alert("Please provide valid login credentials"); 
      $location.path("/main") 
     } 
     }); 
    } 

}]); 

app.js

var bookApp = angular.module('bookApp',[ 
'Controllers','ngRoute' 
]); 
bookApp.config(['$routeProvider', 
function($routeProvider) { 
    $routeProvider. 
    when('/main', { 
     templateUrl: 'Login', 
     controller: 'LoginCtrl' 
    }). 
    when('/home/student', { 
     templateUrl: 'ViewBooks_Student.html', 
     controller: 'BookListCtrl_Student' 
    }). 
    when('/home/librarian', { 
     templateUrl: 'ViewBooks_Librarian.html', 
     controller: 'BookListCtrl_Librarian' 
    }). 
    when('/issue/:bookId', { 
     templateUrl: 'IssueBook.html', 
     controller: 'IssueBookCtrl' 
    }). 
    when('/return/:bookId', { 
     templateUrl: 'ReturnBook.html', 
     controller: 'ReturnBookCtrl' 
    }). 
    otherwise({ 
     redirectTo: '/main' 
    }); 
}]); 
+1

'$ scope.role' не установлен нигде, поэтому его значение' undefined' – GillesC

+0

Спасибо GillesC, я заменил его role.role, но все же маршрутизация не работает. –

+0

Ваш '$ http.get()' - это асинхронный вызов, поэтому код перейдет к вашей строке 'angleular.forEach()' до того, как будет заполнен '$ scope.roles'. Вероятно, вам придется переместить все это в функцию успеха вашего вызова '$ http.get()'. – Lex

ответ

1

Это своего рода в задаче глубины. насколько я понял после входа в систему, вам нужно перенаправить на страницу на основе роли пользователя. поэтому эта конкретная логика которой вы писали на контроллере, что вещь, которую вы должны написать в угловой Run блок

angular.module('myapp').run([],function(){}) 

в основном Угловой имеет блок системы запуска выполнения приоритета запускаемые перед контроллером. для более подробной информации. Угловая документация. https://docs.angularjs.org/guide/module.

Смежные вопросы