Моя фабрика не определена в моем контроллере, и я не могу понять, почему. Я создал простой пример для иллюстрации.AngularJS: Почему моя фабрика всегда не определена в моем контроллере?
Здесь я создаю приложение:
var ruleApp = angular
.module("ruleApp", [
"ngRoute",
"ruleApp.NewFactory1",
"ruleApp.NewFactory2",
]);
В этом примере манекена я хотел бы построить завод, который делает что-то простое, показать окно предупреждения. Я покажу два способа сделать это (один работает, а другой нет).
Фабрика 1:
angular
.module('ruleApp.NewFactory1', [])
.factory('NewFactory1', function() {
return function(msg) {
alert(msg);
};
});
Factory 2:
angular
.module('ruleApp.NewFactory2', [])
.factory('NewFactory2', function() {
var showMessageFunction = function(msg) {
alert(msg);
};
return
{
showMessage: showMessageFunction
};
});
Обратите внимание на тип возврата фабрики 1 является функцией и тип возвращаемого завода 2 представляет собой объект с свойство (которое имеет функцию типа).
Теперь посмотрим на то, как я хотел бы использовать оба этих заводов в моем контроллере:
ruleApp.controller("RuleController", function($scope, NewFactory1, NewFactory2) {
NewFactory1("1");
NewFactory2.showMessage("2");
});
Здесь проблема не подвергается. Во время выполнения мне сообщается окно предупреждения для NewFactory1("1");
, но оно не выполняется во время выполнения NewFactory2.showMessage("2");
, потому что NewFactory2 не определено (TypeError: Невозможно вызвать метод showMessage неопределенного).
Можете ли вы помочь мне выявить проблему? Я хочу иметь возможность использовать такие фабрики, как NewFactory2, потому что я хочу, чтобы фабрики могли делать больше, чем одну вещь (т. Е. Иметь более одной единственной функции). Кстати, я использую Angular 1.2.1.
Вы должны попытаться воспроизвести это в plunker. – Stewie