Фабрика не функция в моем контроллере

0

Я пытаюсь написать фабрику и использовать ее в одном из моих контроллеров, но это дает мне ошибку:

TypeError: wordsToTrain не является функцией

Я сделал свой контроллер и фабрику очень простыми, но до сих пор не понимаю, почему это происходит:

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

angular.module('bananaApp')
  .factory('wordsToTrain', function () {
    return  3;
  });
  • 0
    В вашем контроллере wordToTrain будет равно 3, вот так работает угловой DI
  • 0
    Вот как выглядит хороший учебник по AngularJS DI: henriquat.re/basics-of-angular/services-dependency-injection/…
Показать ещё 2 комментария
Теги:

3 ответа

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

Попробуйте определить свой сервис следующим образом:

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

   var wordsToTrain = {};

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

И используйте его вот так:

var value=wordsToTrain.getValue();
  • 0
    Вы пропускаете возвращение wordsToTrain в своей заводской функции
0

Factor вернет объект и вы можете прикрепить метод к этой заводской функции.

Кроме того, обратите внимание на [] в угловом модуле.

Параметр [] в определении модуля может использоваться для определения зависимых модулей. Без параметра [] вы не создаете новый модуль, а получаете существующий.

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

Демо здесь

  • 0
    Ты прав. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню