AngularJS tarjoaa palveluita, jotka ovat uudelleenkäytettäviä singleton-objekteja. Niiden avulla voidaan jakaa koodia käyttäjien AngularJS-sovellusten kesken. Niitä voidaan myös injektoida direktiiveihin, suodattimiin ja kontrollereihin. Tässä artikkelissa ymmärrämme tehtaan AngularJS:ssä.
- Mikä on tehdas AngularJS:ssä?
- Palvelun ja tehtaan ero
- Esimerkki tehtaasta JavaScriptissä
Mikä on tehdas AngularJS:ssä?
Tehdas on Angular-funktio, jota käytetään arvojen palauttamiseen. Factoryn avulla luodaan tilauksesta arvo, kun palvelu tai kontrolleri tarvitsee sitä. Kun arvo on luotu, sitä käytetään uudelleen kaikissa palveluissa ja kontrollereissa.
Tehtaan avulla voimme luoda palvelun.
Palvelun ja tehtaan ero
- Palvelu voidaan määritellä seuraavalla tavalla:
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'
});
- Tehdas, sen sijaan voidaan määritellä seuraavalla tavalla:
app.factory('FirstService', function () {
return {
sayHola: function () {
sayHola: function () {
console.log('Hola');
}
}
});
tehdas() on myös metodi, joka ottaa vastaan nimen ja funktion, joka määrittelee tehtaan. Voimme injektoida sen samalla tavalla kuin palvelun injektoinnin. Suurin ero palvelun ja tehtaan välillä on se, että factoryn tapauksessa palautamme objektiliteraalin (sen sijaan, että käyttäisimme tätä). Syynä on se, että palvelu on konstruktorifunktio, kun taas tehdas ei ole.
- Ymmärtääksemme paremmin tarkastellaan factory-funktiota():
function factory(name, factFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factFn) : factFn
});
}
Yllä annetussa koodissa se ottaa vastaan nimen ja välitetyn factory-funktion. Se palauttaa samannimisen palveluntarjoajan sekä $get
-metodin (joka on tehdasfunktio) . Tämä johtuu siitä, että aina kun injektorilta kysytään tiettyä riippuvuutta, injektori kysyy palveluntarjoajalta kyseisen palvelun instanssia kutsumalla $get()
-metodia.
- FirstServicen injektoinnissa kutsutaan tehdasfunktioita:
FirstServiceProvider.$get(); // return the instance of the service
- Palvelun koodin osalta:
function service(name, constructor) {
return factory(name, );
}
Kutsuessamme service(), factory()
kutsutaan
return factory(name, );
}
. Tämä tapahtuu välittämällä funktio, joka pyytää injektoria instantioimaan objektin konstruktorin avulla. Yksinkertaisemmin sanottuna palvelu kutsuu ennalta määriteltyä tehdasta.
$injector.instantiate()
kutsuu Object.create()
konstruktorifunktiolla. Siksi tätä käytetään palveluissa.
Esimerkki tehtaasta JavaScriptissä
var firstModule = angular.module("firstModule", );
firstModule.factory("firstFactory", function() {
return "a value";
});
firstModule.controller("FirstController", function($scope, firstFactory) {
console.log(firstFactory);
});
Arvojen injektointi tehtaaseen
Tehtaaseen voidaan injektoida arvo seuraavalla menetelmällä:
var firstModule = angular.module("firstModule", );
firstModule.value("numberValue", 29);
firstModule.controller("FirstController", function($scope, numberValue) {
console.log(numberValue);
});
Huomautus: On huomioitava, että injektoidaan tehdasfunktion tuottama arvo, ei itse tehdasfunktiota.
Tällä päädymme tämän Factory in AngularJS -artikkelin loppuun. Toivottavasti sait ymmärryksen siitä, mikä tarkalleen ottaen on tehdas ja miten se eroaa palvelusta.
Katso Angular-koulutus Edurekalta, luotettavalta verkko-oppimisyritykseltä, jolla on yli 250 000 tyytyväisen oppijan verkosto eri puolilla maailmaa. Angular on JavaScript-kehys, jota käytetään skaalautuvien, yritys- ja suorituskykyisten asiakaspuolen verkkosovellusten luomiseen. Koska Angular-kehys on otettu laajasti käyttöön, sovelluksen suorituskyvyn hallinta on yhteisölähtöistä, mikä parantaa epäsuorasti työmahdollisuuksia. Angular-sertifiointikoulutuksen tavoitteena on kattaa kaikki nämä uudet käsitteet yrityssovelluskehityksen ympärillä.