Я пытаюсь написать фабрику и использовать ее в одном из моих контроллеров, но это дает мне ошибку:
TypeError: wordsToTrain не является функцией
Я сделал свой контроллер и фабрику очень простыми, но до сих пор не понимаю, почему это происходит:
angular.module('bananaApp')
.controller('TrainingCtrl', [ '$scope', 'wordsToTrain', function ($scope, wordsToTrain) {
wordsToTrain();
}]);
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 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;
});
Попробуйте определить свой сервис следующим образом:
angular.module('bananaApp')
.factory('wordsToTrain', function () {
var wordsToTrain = {};
wordsToTrain.getValue = function() {
return 3;
}
return wordsToTrain;
});
И используйте его вот так:
var value=wordsToTrain.getValue();
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;
});
Демо здесь