使用Angular 1.6.x
很难让工厂使用登录提交
login.controller.js
angular.module('appName').controller('LoginController',[
'$scope',
function($scope, Login){
$scope.submitLogin = function(){
console.log('login requested');
Login.login();
}
}]);
login.factory.js
angular.module('appName').factory('Login', function (){
var service = {};
service.login = function(){
console.log('Login Factory');
}
return service;
});
我得到的错误是TypeError: Cannot read property 'login' of undefined
从所有示例中我都看到我将工厂注入控制器,在工厂中创建了一个对象,然后将该对象返回。我在这里缺少什么?
另一个问题是为什么我无法将工厂包含在我的控制器中?
angular.module('appName').controller('LoginController',[
'$scope',
Login, // <<<<<< This throws an error (scripts.min.js:1 Uncaught ReferenceError: Login is not defined)
function($scope, Login){
$scope.submitLogin = function(){
console.log('login requested');
Login.login();
}
}]);
我注入这种方式的原因是为了消除缩小过程中出错的可能性。
修改
问题回答了注入工厂的行情。
angular.module('appName').controller('LoginController',[
'$scope',
'Login', // <<<< Was not using quotes
function($scope, Login){
$scope.submitLogin = function(){
console.log('login requested');
Login.login();
}
}]);
答案 0 :(得分:2)
您必须注入Login
工厂并将其包装在引号'Login'
中:
'$scope', 'Login',
function($scope, Login){
答案 1 :(得分:1)
angular.module('appName').controller('LoginController',[
'$scope',
'Login', // <<<<<< you should inject within quotes
$scope.submitLogin = function(){
console.log('login requested');
Login.login();
}
}]);
答案 2 :(得分:1)
您需要将factoryName
括在single quotes
angular.module('appName').controller('LoginController',[
'$scope',
'Login', // Change hereReferenceError: Login is not defined)
function($scope, Login){
$scope.submitLogin = function(){
console.log('login requested');
Login.login();
}
}]);
答案 3 :(得分:0)
应该是,您缺少 ''
angular.module('appName').controller('LoginController',[
'$scope',
'Login',
function($scope, Login){
}]);
答案 4 :(得分:0)
还请注意,带有报价的进样的顺序必须与参数保持一致。例如,以下内容仍会为您提供undefined
:
angular.module('appName').controller('LoginController',
['$scope', 'Factory1', 'Factory2',
function($scope, Factory2, Factory1){
Factory1.something; // undefined
Factory2.something; // undefined
}]);
您需要遵循顺序,如下所示:
angular.module('appName').controller('LoginController',
['$scope', 'Factory1', 'Factory2',
function($scope, Factory1, Factory2){
Factory1.something; // Yay!
Factory2.something; // Woohoo!
}]);