AngularJS udostępnia usługi, które są obiektami singletonowymi wielokrotnego użytku. Mogą one być używane do współdzielenia kodu przez użytkowników aplikacji AngularJS. Mogą być również wstrzykiwane do dyrektyw, filtrów i kontrolerów. W tym artykule, będziemy rozumieć fabrykę w AngularJS.
- Co to jest Fabryka w AngularJS?
- Różnica między usługą a fabryką
- Przykład Fabryki w JavaScript
Co to jest Fabryka w AngularJS?
Fabryka jest funkcją kątową, która jest używana do zwracania wartości. Wartość na żądanie jest tworzona przez fabrykę, gdy tylko usługa lub kontroler jej potrzebuje. Po utworzeniu wartości, jest ona ponownie używana dla wszystkich usług i kontrolerów.
Factory możemy użyć do stworzenia usługi.
Różnica między usługą a fabryką
- Usługa może być zdefiniowana w następujący sposób:
app.service('FirstService', function () {
this.sayHola = function () {
console.log('Hola');
};
});
The .service() method takes the name and the function that defines the service. We can inject it in the following way:
app.controller('AppController', function (FirstService) {
FirstService.sayHola(); // logs 'Hola'
});
- Fabryka, z drugiej strony można zdefiniować w następujący sposób:
app.factory('FirstService', function () {
return {
sayHola: function () {
console.log('Hola');
}
}
});
factory() to również metoda, która przyjmuje nazwę i funkcję definiującą fabrykę. Możemy wstrzyknąć ją w taki sam sposób jak wstrzykuje się usługę. Główną różnicą pomiędzy usługą a fabryką jest to, że w przypadku fabryki zwracamy dosłowny obiekt (zamiast używać this). Powodem jest to, że usługa jest funkcją konstruktora, podczas gdy fabryka nie.
- Dla lepszego zrozumienia, przyjrzyjmy się funkcji factory():
function factory(name, factFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factFn) : factFn
});
}
W kodzie podanym powyżej, przyjmuje ona nazwę i przekazaną funkcję factory. Zwraca dostawcę o tej samej nazwie, wraz z metodą $get
(która jest funkcją fabryczną). Wynika to z faktu, że za każdym razem, gdy injector jest proszony o konkretną zależność, injector prosi dostawcę o instancję tej usługi poprzez wywołanie metody $get()
.
- Po wstrzyknięciu FirstService, funkcje fabryczne zostają wywołane:
FirstServiceProvider.$get(); // return the instance of the service
- Dla kodu usługi:
function service(name, constructor) {
return factory(name, );
}
Gdy wywołujemy service(), factory()
to ta, która jest faktycznie wywoływana. Odbywa się to poprzez przekazanie funkcji, która prosi injector o zainicjowanie obiektu przez konstruktor. Mówiąc prościej, usługa wywołuje predefiniowaną fabrykę.
$injector.instantiate()
wywołuje Object.create()
za pomocą funkcji konstruktora. Dlatego właśnie jest to wykorzystywane w usługach.
Przykład Factory w JavaScript
var firstModule = angular.module("firstModule", );
firstModule.factory("firstFactory", function() {
return "a value";
});
firstModule.controller("FirstController", function($scope, firstFactory) {
.
console.log(firstFactory);
});
Wstrzykiwanie wartości do fabryki
Wartość może być wstrzyknięta do fabryki za pomocą następującej metody:
var firstModule = angular.module("firstModule", );
firstModule.value("numberValue", 29);
firstModule.controller("FirstController", function($scope, numberValue) {
console.log(numberValue);
});
UWAGA: Należy zauważyć, że wstrzykiwana jest wartość wytworzona przez funkcję fabryki, a nie sama funkcja fabryki.
Tym samym kończymy ten artykuł Fabryka w AngularJS. Mam nadzieję, że zrozumiałeś, czym dokładnie jest fabryka i jak różni się od usługi.
Sprawdź szkolenie Angular przez Edureka, zaufaną firmę edukacyjną online z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Angular to framework JavaScript, który jest używany do tworzenia skalowalnych, korporacyjnych i wydajnościowych aplikacji internetowych po stronie klienta. Przy wysokiej adopcji frameworka Angular, zarządzanie wydajnością aplikacji jest napędzane przez społeczność, co pośrednio przekłada się na lepsze możliwości zatrudnienia. Szkolenie Angular Certification ma na celu pokrycie wszystkich tych nowych koncepcji wokół Enterprise Application Development.