我刚刚开始使用AngularJS,因为我总是习惯在服务器端工作,我在完成任务时遇到了一些困难,特别是调试代码并找出错误可能是什么.
我见过很多人使用事件$stateChangeStart来验证用户身份验证.我正在尝试这样做,但是当我尝试将我的服务注入run方法时,我总是得到未定义的服务.这是我的电话:
angular .module('module_name') .config(config) .run(function($rootScope,$state,authService) { $rootScope.$state = $state; $rootScope.$on("$stateChangeStart",function(event,toState,toParams,fromState,fromParams) { if (toState.authenticate && !authService.isLoggedIn()) { $state.go("login"); event.preventDefault(); } }); });
码:
编辑1:
包括:
<!-- Angular App Script --> <script src="js/app.js"></script> <script src="js/services/authService.js"></script> <script src="js/config.js"></script> <script src="js/directives.js"></script> <script src="js/controllers/MainCtrl.js"></script> <script src="js/controllers/LoginCtrl.js"></script>
JS / app.js:
(function () { angular.module('module_name',[ 'ui.router','ui.bootstrap','LocalStorageModule',]) })();
authService.js:
angular .module('module_name') .factory('authService',['$http','$q','$rootScope','localStorageService',function ($http,$q,$rootScope,localStorageService) { var serviceBase = 'http://url'; var authServiceFactory = {}; var _authentication = { isAuth: false,userName : "" }; var _saveRegistration = function (registration) { _logout(); return $http.post(serviceBase + 'account/register',registration).then(function (response) { return response; }); }; var _login = function (loginData) { var deferred = $q.defer(); $http.get(serviceBase + 'account/token',{ headers: { 'username': loginData.userName,'password': loginData.password } }).success(function (response,status,headers,config) { localStorageService.set('authorizationData',{ token: headers('token'),userName: loginData.userName }); _authentication.isAuth = true; _authentication.userName = loginData.userName; deferred.resolve(response); }).error(function (err,status) { _logout(); deferred.reject(err); }); return deferred.promise; }; var _logout = function () { localStorageService.remove('authorizationData'); _authentication.isAuth = false; _authentication.userName = ""; }; var _isLoggedIn = function() { return _authentication.isAuth; } authServiceFactory.isLoggedIn = _isLoggedIn; return authServiceFactory; }]);
config.js:
function config($stateProvider,$urlRouterProvider,$locationProvider) { $urlRouterProvider.otherwise("/"); $stateProvider .state('login',{ url: "/",templateUrl: "login.html",controller: function($scope) { $('body').addClass('gray-bg'); },data: { pageTitle: 'Example view' },authenticate: false }) .state('main',{ url: "/main",templateUrl: "views/main.html",authenticate: true }) .state('minor',{ url: "/minor",templateUrl: "views/minor.html",authenticate: true }); //$locationProvider.html5Mode(true); } angular .module('module_name') .config(config) .run(['$rootScope','$state','authService',function ($rootScope,fromParams) { if (toState.authenticate && !authService.isLoggedIn()) { $state.go("login"); event.preventDefault(); } }); }]);
我已经阅读了一点,看到有订单注入服务,提供商和工厂,但我无法让它工作.
我究竟做错了什么?