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 sovelluslogiikan tai datan ainoa totuuden lähde. Jos olet kiinnostunut, voit lukea lisää singleton-mallista tässä artikkelissa.
Logiikan lisääminen palveluun
Seuraavaksi rakennetaan palvelun varsinainen logiikka. Palvelun tavoitteet ovat seuraavat:
-
Tehtävälistan tallentaminen;
-
Tehtävälistan palauttaminen;
-
Tehtävien poistaminen;
-
Tehtävien valmistumistilan vaihtaminen.
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ä kohtaa sellaisen 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.
deleteTask(id: number)-metodi 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, että logiikkaa tarvitsee toistaa.
1. Miksi palvelu luodaan Angularissa?
2. Mitä providedIn: 'root' tarkoittaa @Injectable-koristelijassa?
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 sovelluslogiikan tai datan ainoa totuuden lähde. Jos olet kiinnostunut, voit lukea lisää singleton-mallista tässä artikkelissa.
Logiikan lisääminen palveluun
Seuraavaksi rakennetaan palvelun varsinainen logiikka. Palvelun tavoitteet ovat seuraavat:
-
Tehtävälistan tallentaminen;
-
Tehtävälistan palauttaminen;
-
Tehtävien poistaminen;
-
Tehtävien valmistumistilan vaihtaminen.
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ä kohtaa sellaisen 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.
deleteTask(id: number)-metodi 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, että logiikkaa tarvitsee toistaa.
1. Miksi palvelu luodaan Angularissa?
2. Mitä providedIn: 'root' tarkoittaa @Injectable-koristelijassa?
3. Miksi palautetaan [...this.tasks] eikä pelkästään this.tasks metodissa getTasks()?
Kiitos palautteestasi!