Oman Palvelun Luominen Angularissa
Palvelun luominen
Angular tarjoaa kätevän CLI-komennon, jolla voit nopeasti luoda palvelun. Tämä komento luo tarvittavat tiedostot ja tuonnit:
Tämän komennon suorittamisen jälkeen Angular luo kaksi tiedostoa:
-
task.service.ts
— varsinainen palvelutiedosto; -
task.service.spec.ts
— testitiedosto (voit poistaa tämän).
Tässä on task.service.ts
-tiedoston alkuperäinen sisältö:
task-service.ts
@Injectable
-koristelija ilmoittaa Angularille, että tämä palvelu voidaan injektoida muihin luokkiin.
providedIn: 'root'
tarkoittaa, että Angular rekisteröi palvelun automaattisesti juurimoduuliin ja luo siitä yhden instanssin koko sovellukselle.
Singleton on suunnittelumalli, joka varmistaa, että luokalla on vain yksi instanssi ja tarjoaa globaalin pääsyn siihen.
Komponentti A
, komponentti B
tai mikä tahansa muu komponentti — kaikki saavat saman palvelun instanssin. Tämä on erittäin kätevää, koska voit tallentaa jaettua dataa (kuten tehtävälistan) ja välttää logiikan toiston.
Siksi palvelusta tulee tietyn sovelluksen logiikan tai datan yksittäinen totuuden lähde. Jos olet kiinnostunut, voit lukea lisää singleton-mallista tästä artikkelista.
Logiikan lisääminen palveluun
Seuraavaksi rakennetaan palvelun varsinainen logiikka. Palvelun tavoitteena on:
-
Tallentaa tehtävälista;
-
Palauttaa tehtävälista;
-
Poistaa tehtäviä;
-
Vaihtaa tehtävien valmistumistilaa.
Määritellään ensin, miltä tehtävä näyttää, luomalla TypeScript-rajapinta:
task-interface.ts
Tämä rajapinta määrittelee selkeästi tehtävän rakenteen — siihen kuuluu id, otsikko ja valmistumistila. Et ole aiemmin käyttänyt rajapintoja, mutta tässä niiden lisääminen tekee koodista helpommin ymmärrettävää ja käsiteltävää.
Rakennetaan nyt palvelu, joka hallinnoi tehtävälistaasi:
task-service.ts
Tässä esimerkissä tehtävädata tallennetaan suoraan koodiin yksityiseen tasks
-taulukkoon.
Jotta muut sovelluksen osat voivat käyttää tehtävälistaa, käytetään getTasks()
-metodia. Se palauttaa kopion taulukosta käyttämällä spread-syntaksia ([...]
), mikä suojaa alkuperäistä dataa tahattomilta muutoksilta.
Metodi deleteTask(id: number)
poistaa tehtävän suodattamalla pois sen, jonka ID täsmää, ja päivittää listan.
Toinen tärkeä metodi on toggleTaskStatus(id: number)
. Se etsii tehtävän ID:n perusteella ja vaihtaa sen valmistumistilaa — jos tehtävä oli merkitty valmiiksi (true
), siitä tulee keskeneräinen (false
), ja päinvastoin.
Saatat tunnistaa suuren osan tästä logiikasta TaskListComponent
-komponentistasi. Nyt kaikki on siirretty TaskService
-palveluun, mikä selkeyttää komponenttejasi ja keskittää logiikan yhteen paikkaan.
Tämä palvelu toimii nyt perustana, jonka avulla komponenttisi voivat olla vuorovaikutuksessa tehtävälistan kanssa — ilman logiikan toistoa.
1. Miksi Angularissa luodaan palvelu?
2. Mitä providedIn: 'root'
tarkoittaa @Injectable
-koristeessa?
3. Miksi palautetaan [...this.tasks]
eikä pelkästään this.tasks
metodissa getTasks()
?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.13
Oman Palvelun Luominen Angularissa
Pyyhkäise näyttääksesi valikon
Palvelun luominen
Angular tarjoaa kätevän CLI-komennon, jolla voit nopeasti luoda palvelun. Tämä komento luo tarvittavat tiedostot ja tuonnit:
Tämän komennon suorittamisen jälkeen Angular luo kaksi tiedostoa:
-
task.service.ts
— varsinainen palvelutiedosto; -
task.service.spec.ts
— testitiedosto (voit poistaa tämän).
Tässä on task.service.ts
-tiedoston alkuperäinen sisältö:
task-service.ts
@Injectable
-koristelija ilmoittaa Angularille, että tämä palvelu voidaan injektoida muihin luokkiin.
providedIn: 'root'
tarkoittaa, että Angular rekisteröi palvelun automaattisesti juurimoduuliin ja luo siitä yhden instanssin koko sovellukselle.
Singleton on suunnittelumalli, joka varmistaa, että luokalla on vain yksi instanssi ja tarjoaa globaalin pääsyn siihen.
Komponentti A
, komponentti B
tai mikä tahansa muu komponentti — kaikki saavat saman palvelun instanssin. Tämä on erittäin kätevää, koska voit tallentaa jaettua dataa (kuten tehtävälistan) ja välttää logiikan toiston.
Siksi palvelusta tulee tietyn sovelluksen logiikan tai datan yksittäinen totuuden lähde. Jos olet kiinnostunut, voit lukea lisää singleton-mallista tästä artikkelista.
Logiikan lisääminen palveluun
Seuraavaksi rakennetaan palvelun varsinainen logiikka. Palvelun tavoitteena on:
-
Tallentaa tehtävälista;
-
Palauttaa tehtävälista;
-
Poistaa tehtäviä;
-
Vaihtaa tehtävien valmistumistilaa.
Määritellään ensin, miltä tehtävä näyttää, luomalla TypeScript-rajapinta:
task-interface.ts
Tämä rajapinta määrittelee selkeästi tehtävän rakenteen — siihen kuuluu id, otsikko ja valmistumistila. Et ole aiemmin käyttänyt rajapintoja, mutta tässä niiden lisääminen tekee koodista helpommin ymmärrettävää ja käsiteltävää.
Rakennetaan nyt palvelu, joka hallinnoi tehtävälistaasi:
task-service.ts
Tässä esimerkissä tehtävädata tallennetaan suoraan koodiin yksityiseen tasks
-taulukkoon.
Jotta muut sovelluksen osat voivat käyttää tehtävälistaa, käytetään getTasks()
-metodia. Se palauttaa kopion taulukosta käyttämällä spread-syntaksia ([...]
), mikä suojaa alkuperäistä dataa tahattomilta muutoksilta.
Metodi deleteTask(id: number)
poistaa tehtävän suodattamalla pois sen, jonka ID täsmää, ja päivittää listan.
Toinen tärkeä metodi on toggleTaskStatus(id: number)
. Se etsii tehtävän ID:n perusteella ja vaihtaa sen valmistumistilaa — jos tehtävä oli merkitty valmiiksi (true
), siitä tulee keskeneräinen (false
), ja päinvastoin.
Saatat tunnistaa suuren osan tästä logiikasta TaskListComponent
-komponentistasi. Nyt kaikki on siirretty TaskService
-palveluun, mikä selkeyttää komponenttejasi ja keskittää logiikan yhteen paikkaan.
Tämä palvelu toimii nyt perustana, jonka avulla komponenttisi voivat olla vuorovaikutuksessa tehtävälistan kanssa — ilman logiikan toistoa.
1. Miksi Angularissa luodaan palvelu?
2. Mitä providedIn: 'root'
tarkoittaa @Injectable
-koristeessa?
3. Miksi palautetaan [...this.tasks]
eikä pelkästään this.tasks
metodissa getTasks()
?
Kiitos palautteestasi!