gpt4 book ai didi

angularjs - 无法在运行方法angularjs中注入(inject)服务

转载 作者:行者123 更新时间:2023-12-05 00:24:35 24 4
gpt4 key购买 nike

我刚开始使用 AngularJS,因为我一直习惯于在服务器端工作,所以我在完成工作时遇到了一些困难,特别是调试代码并找出错误可能是什么。

我见过很多人使用事件 $stateChangeStart 来验证用户身份验证。我正在尝试这样做,但是当我尝试将我的服务注入(inject)运行方法时,我总是得到未定义的服务。这是我的电话:

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;
}]);

配置.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",
data: { pageTitle: 'Example view' },
authenticate: true
})
.state('minor', {
url: "/minor",
templateUrl: "views/minor.html",
data: { pageTitle: 'Example view' },
authenticate: true
});
//$locationProvider.html5Mode(true);
}
angular
.module('module_name')
.config(config)
.run(['$rootScope', '$state', 'authService', 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();
}
});

}]);

我读了一点,看到有一个注入(inject)服务、提供者和工厂的命令,但我无法让它工作。
我究竟做错了什么?

最佳答案

我不知道错误的确切原因,但上面的代码正在运行。
对于那些可能面临同样问题的人,我认为错误在于以下行:

.run(['$rootScope', '$state', 'authService', function ($rootScope, $state, authService) {

在此之前,它没有括号 [],只有 authService 像这样注入(inject):
.run('authService', function (authService) {

因此,请记住添加所有内容并添加括号。我真的不知道为什么这个括号,如果有或没有它们有什么区别(有人可以帮助我),但这是我的代码的工作方式。

关于angularjs - 无法在运行方法angularjs中注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com