Я новичок в AngularJS, и я только начинаю понимать понятия и различия factory
, service
и controller
. Как я понимаю, для возврата «объекта значения», который может быть введен, используется factory
. Большинство примеров, которые я видел что-то вроде этого:Создать класс для инъекций (конструктор)
angular.module('module.factories', function() {
factory('FactoryObject', function() {
return {
someFunction: function(someParam) {};
someOtherFunction: function(someOtherParam) {});
};
});
});
В моих controller
, я хочу, чтобы иметь возможность использовать этот объект, но я хотел бы, чтобы инициализировать/создать его экземпляр в контроллере, так как он может быть повторно - инициализируется в зависимости от событий/действий в контроллере. Поэтому мне было интересно, могу ли я вернуть функцию-конструктор на фабрике?
angular.module('module.factories', function() {
factory('FactoryObject', function() {
function FactoryObject(initParam) {
}
FactoryObject.prototype.someFunction = function() {};
return FactoryObject;
});
});
Это подходящий шаблон для угловой фабрики? Или это просто «overkill», чтобы использовать фабрику для пользовательского объекта, подобного этому? Должен ли я просто включить его в файл js библиотеки и вместо этого ссылаться на него? Одно из преимуществ его установки на заводе заключается в том, что будет легко издеваться над ним в тесте, поскольку оно будет введено там, где оно используется. Существуют ли какие-либо другие механизмы в Angular, которые можно было бы использовать вместо этого?
Я думаю, что весь смысл объявления вашего пользовательского фабричного объекта внутри предоставляющей функции заключается в том, что он отвлекается от остальной части приложения. – Bart
Если вам действительно нужна функция конструктора, то что вы делаете, это нормально! – ganaraj
@ganaraj Причина, по которой мне «нужна», заключается в том, что ее потенциально можно повторно инициализировать несколько раз в контроллере в течение всего срока службы контроллера. Я мог бы просто вернуть обычный объект, а затем использовать метод init, но я не понимаю, как это будет лучше. Спасибо за ответ. – NilsH