AngularJS错误:提供程序必须从$get工厂方法返回值
AngularJS error: Provider must return value from $get factory method
我试图构建的是一个登录服务。我写了一个工厂,每个控制器都需要使用它。它用于检查用户是否已登录。但我得到了这个错误:
Provider must return value from $get factory method
我是Angular的新手。这是我的索引页:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Index Page</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="assets/lib/angular.js"></script>
<script src="assets/lib/angular-route.js"></script>
<script src="app/app.js"></script>
<script src="app/AuthenticationService.js"></script>
</head>
<body>
<div ng-view></div>
</body>
</html>
app.js文件:
( function () {
angular.module('myApp', [
'ngRoute',
'ngAnimate',
'myApp.login',
'myApp.home',
'myApp.AuthenticationService'
])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/login', {
controller: 'LoginController',
templateUrl: 'loginView.html',
controllerAs: 'vm'
})
.when('/home', {
controller: 'HomeController',
templateUrl: 'HomeView.html',
controllerAs: 'vm'
})
.otherwise({
redirectTo: '/login'
});
}]);
})();
这就是我建立的工厂:
(function() {
angular
.module('myApp.AuthenticationService', [])
.factory('AuthService', ["$http", "$location", function($http, $location){
var vm = this;
vm.checkToken = function(token){
var data = {token: token};
$http.post("endpoints/checkToken.php", data).success(function(response){
if (response === "unauthorized"){
console.log("Logged out");
$location.path('/login');
} else {
console.log("Logged In");
return response;
}
}).error(function(error){
$location.path('/login');
})
}
}]);
})();
And this is how I inject it in a controller:
(function() {
angular
.module('myApp.home', [])
.controller('HomeController', function($routeParams,AuthService) {
var vm = this;
//If user is not logged in
var token;
if (localStorage['token']){
token = JSON.parse(localStorage['token']);
} else {
token = "something stupid";
}
AuthService.checkToken(token);
$scope.logout = function(){
var data = {
token: token
}
$http.post('endpoints/logout.php', data).success(function(response){
console.log(response)
localStorage.clear();
$state.go("login");
}).error(function(error){
console.error(error);
})
}
});
})();
有人能指出我犯的错误吗?提前谢谢。
.factory('AuthService', ["$http", "$location", function($http, $location){
var vm = this;
vm.checkToken = function(token){
var data = {token: token};
$http.post("endpoints/checkToken.php", data).success(function(response){
if (response === "unauthorized"){
console.log("Logged out");
$location.path('/login');
} else {
console.log("Logged In");
return response;
}
}).error(function(error){
$location.path('/login');
})
}
return vm;
}]);
Angular工厂应该返回一个要由控制器消耗的对象。
这里的问题是因为您没有在工厂函数中返回对象。在您的情况下,您需要使用.service()
,而不是使用.factory()
。这是因为您正在使用构造函数(在函数中使用this
)。如果你想使用工厂,你可以做如下:
.factory('AuthService', ["$http", "$location", function($http, $location){
var service = {
checkToken: function() {...}
};
return service;
}])
你可以按照John Papa风格指南,更喜欢使用工厂而不是服务。
(function() {
angular
.module('myApp.AuthenticationService', [])
.factory('AuthService', ["$http", "$location", function($http, $location){
var vm = {};
vm.checkToken = function(token){
var data = {token: token};
$http.post("endpoints/checkToken.php", data).success(function(response){
if (response === "unauthorized"){
console.log("Logged out");
$location.path('/login');
} else {
console.log("Logged In");
return response;
}
}).error(function(error){
$location.path('/login');
})
}
return vm;
}]);
})();
或以下是创建工厂的更好方法:
(function() {
angular
.module('myApp.AuthenticationService', [])
.factory('AuthService', ["$http", "$location", function($http, $location){
var vm = {
checkToken: checkToken
};
function checkToken(token){
var data = {token: token};
$http.post("endpoints/checkToken.php", data).success(function(response){
if (response === "unauthorized"){
console.log("Logged out");
$location.path('/login');
} else {
console.log("Logged In");
return response;
}
}).error(function(error){
$location.path('/login');
})
}
return vm;
}]);
})();
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- Angularjs工厂注入错误
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- 在工厂构造函数中解析 Restangular.get
- 将数据从输入字段传递到角度工厂中的 $http.get
- Angular 工厂未从 Soundcloud (SC.get) 请求返回数据
- AngularJS-错误:[$injector:pget]提供程序'函数()'必须定义$get工厂方法
- 是否可以将GET响应数据传递回同一工厂
- 如何创建一个使用http的工厂.Get并把它传递给angular中的多个控制器
- 如何在angularjs中使用http get从工厂返回业务对象
- 如何使用angular工厂从rest api返回http get请求
- & # 39; EventModel& # 39;必须从$get工厂方法返回一个值
- 供应商& # 39;任务# 39;必须从$get工厂方法返回一个值
- 必须从$get工厂方法返回一个值
- $http TypeError: Cannot read property 'get'未定义的——在工厂
- 供应商& # 39;xx # 39;必须从$get工厂方法返回一个值
- 如何使用angularjs工厂的get和set
- Angular提供商错误——必须定义$get工厂方法
- Angular提供程序必须从$get工厂方法中返回一个值