Я изучаю провайдеров в AngularJS, но я новичок в AngularJS и не очень разбираюсь в javascript.
Я смотрел в коде AngularStrap и обнаружил, что модальный провайдер (src\modal\modal.js) возвращает функцию вместо объекта:
this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {
...
return ModalFactory;
};
Почему функция возвращается вместо конкретного объекта.
По моему мнению, в этом случае служба не может действовать как синглтон, пожалуйста, поправьте меня, если я ошибаюсь.
Угловые экземпляры службы могут быть любыми (кроме service
службы, поскольку она использует функцию конструктора для создания объекта с new
).
Значение, возвращаемое $get
, сохраняется как экземпляр службы, когда служба вводится в первый раз. Этот экземпляр возвращается во время всех последующих инъекций зависимостей в одном и том же приложении, $get
не будет вызываться снова, поэтому сервисы являются одиночными.
Потому что фабрики - это просто функция, возвращающая объект.
форму угловой код JS:
function factory(name, factoryFn) {
return provider(name, { $get: factoryFn }); //<------ juste called, not newed.
}
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
}
$modal
функция @MarcoPrado$modal
является одиночной, а не значением, которое она возвращает.$modal
зависимость, введенная в одном месте, будет===
равна$modal
зависимости, введенной в других частях приложения. Выполнение$modal.fnProperty = ...
один раз приведет к тому, что функция$modal
будет иметь это свойство везде.