Поставщики AngularJS

0

Я изучаю провайдеров в AngularJS, но я новичок в AngularJS и не очень разбираюсь в javascript.
Я смотрел в коде AngularStrap и обнаружил, что модальный провайдер (src\modal\modal.js) возвращает функцию вместо объекта:

this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {

    ...

    return ModalFactory;
};

Почему функция возвращается вместо конкретного объекта.
По моему мнению, в этом случае служба не может действовать как синглтон, пожалуйста, поправьте меня, если я ошибаюсь.

Теги:
angular-strap

2 ответа

1
Лучший ответ

Угловые экземпляры службы могут быть любыми (кроме service службы, поскольку она использует функцию конструктора для создания объекта с new).

Значение, возвращаемое $get, сохраняется как экземпляр службы, когда служба вводится в первый раз. Этот экземпляр возвращается во время всех последующих инъекций зависимостей в одном и том же приложении, $get не будет вызываться снова, поэтому сервисы являются одиночными.

1

Потому что фабрики - это просто функция, возвращающая объект.

форму угловой код 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);
    }]);
}
  • 0
    но в этом случае, если я, например, вставлю $ modal в мой контроллер, он не будет объектом, в противном случае он вернет объект, если я вызову $ modal (arguments), но не является сервисом, предназначенным для использования в качестве одиночного объект?
  • 0
    Сама $modal функция @MarcoPrado $modal является одиночной, а не значением, которое она возвращает. $modal зависимость, введенная в одном месте, будет === равна $modal зависимости, введенной в других частях приложения. Выполнение $modal.fnProperty = ... один раз приведет к тому, что функция $modal будет иметь это свойство везде.
Показать ещё 1 комментарий

Ещё вопросы

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