Angular Factory"无法阅读物业'财产'未定义的

时间:2017-04-11 06:30:31

标签: javascript angularjs

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

5 个答案:

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