工厂不是我控制器中的功能

时间:2016-05-29 17:06:23

标签: javascript angularjs

我正在尝试编写一个工厂并在我的一个控制器中使用它,但它给了我一个错误:

  

TypeError:wordsToTrain不是函数

我让我的控制器和工厂非常简单,但仍然不明白为什么会发生这种情况:

angular.module('bananaApp')
  .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) {
    wordsToTrain();
  }]);

angular.module('bananaApp')
  .factory('wordsToTrain', function () {
    return  3;
  });

3 个答案:

答案 0 :(得分:1)

尝试定义您的服务:

angular.module('bananaApp')
  .factory('wordsToTrain', function () {

   var wordsToTrain = {};

   wordsToTrain.getValue = function() {
      return 3;
   }
   return wordsToTrain;
  });

并像这样使用它:

var value=wordsToTrain.getValue();

答案 1 :(得分:1)

您正在尝试实例化一个值。您的工厂不会返回它返回值的函数。

angular.module('bananaApp')
  .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) {
    console.log(wordsToTrain) //this would give you 3 not a function;
  }]);

angular.module('bananaApp')
  .factory('wordsToTrain', function () {
    return  3;
  });

//返回一个函数

angular.module('bananaApp')
  .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) {
    console.log(wordsToTrain()) // this would give you 3 as well but this is a function;
  }]);

angular.module('bananaApp')
  .factory('wordsToTrain', function () {
    return function() {
       return 3;
  });

答案 2 :(得分:0)

Factor会返回一个对象&您可以将方法附加到此工厂函数。

在angular.module中注释[]旁边。

模块定义中的[]参数可用于定义依赖模块。如果没有[]参数,则不会创建新模块,而是检索现有模块。

angular.module('bananaApp',[])
      .controller('TrainingCtrl', [ '$scope', 'wordsToTrain', 
                  function ($scope, wordsToTrain) {
       console.log(wordsToTrain.three());
      }]);

    angular.module('bananaApp').factory('wordsToTrain', function () {

       var _factory ={};
       _factory.three = function(){
         return 3;
           }
        return  _factory;
      });

Demo此处