Crea la tua prima app angolare memorizzazione e accesso ai dati

Nel primo tutorial della serie, abbiamo imparato come iniziare per creare un'app Angular. Dopo aver completato con successo questo tutorial, ora dovresti avere la tua prima app Angolare funzionante con l'intestazione "Fatti divertenti sui Paesi". Prima di creare componenti che possono essere visualizzati sullo schermo, creeremo alcune classi e definiremo alcune funzioni che rendono utili quei componenti.

In questo tutorial, ci concentreremo sulla creazione di un Nazione classe che conterrà proprietà diverse il cui valore vogliamo mostrare all'utente. Creeremo quindi un altro file chiamato country-data.ts. Questo file conterrà informazioni su tutti i paesi nella nostra app. Il nostro terzo file sarà nominato country.service.ts. Il nome può sembrare strano, ma il file conterrà solo un CountryService classe con tutte le funzionalità necessarie per recuperare e ordinare le informazioni fornite dal file country-data.ts.

Creare una classe nazionale

Dentro il src / app cartella della tua app Angular, crea un file chiamato country.ts. Aggiungi il seguente codice al suo interno.

export class Paese name: string; capitale: stringa; area: numero; popolazione: numero; valuta: stringa; gdp: numero;  

Il precedente codice TypeScript definisce il Nazione classe con sei diverse proprietà per memorizzare informazioni su diversi paesi. Il nome del paese, la sua capitale e la sua valuta sono memorizzati come una stringa. Tuttavia, la sua area, popolazione e PIL sono memorizzati come un numero. Noi importeremo il Nazione classe in molti posti, quindi ho aggiunto il esportare parola chiave prima della definizione della classe.

Creazione di una matrice di paesi

Il prossimo passo prevede la creazione di a country-data.ts file per memorizzare le informazioni su tutti i paesi come una matrice di Nazione oggetti. Noi importeremo il Nazione classe in questo file e quindi esportando a const di nome PAESI che memorizza una serie di oggetti di campagna. 

Ecco il codice per country-data.ts. Proprio come country.ts, devi creare questo file dentro il src / app cartella.

importare Paese da "./country"; export const PAESI: Paese [] = [nome: 'Russia', capitale: 'Mosca', area: 17098246, popolazione: 144463451, valuta: 'Russian Ruble', gdp: 1283162, nome: 'Canada', maiuscola : 'Ottawa', area: 9984670, popolazione: 35151728, valuta: 'Canadian Dollar', gdp: 159760, nome: 'China', capitale: 'Beijing', area: 9596961, popolazione: 1403500365, valuta: 'Renminbi (Yuan) ', gdp: 11199145, nome:' United States ', capitale:' Washington, DC ', area: 9525067, popolazione: 325365189, valuta:' United States Dollar ', gdp: 18569100, nome: 'Giappone', capitale: 'Tokyo', area: 377972, popolazione: 12676200, valuta: 'Yen', pda: 4939384]; 

La prima riga in questo file importa il file Nazione classe dal country.ts file situato nella stessa directory. Se rimuovi questa riga dal file, TypeScript ti darà il seguente errore:

Impossibile trovare il nome "Paese".

Senza l'istruzione import, TypeScript non ha idea di cosa sia un array di tipo Nazione si intende. Quindi assicurati di aver importato la classe giusta e specificato la posizione di country.ts correttamente.

Dopo aver importato il file Nazione classe, andiamo avanti e creare una serie di Nazione oggetti. Importeremo questa serie di paesi per l'uso all'interno di altri file, quindi aggiungiamo un esportare parola chiave anche a questo array. Attualmente, ci sono cinque diversi Nazione oggetti nella matrice. Ognuno di questi cinque oggetti fornisce coppie chiave-valore che elencano il nome di una proprietà e il suo valore per un particolare oggetto o paese.

Se si tenta di aggiungere una proprietà aggiuntiva alla matrice che non è stata dichiarata all'interno di Nazione definizione della classe, si otterrà il seguente errore:

Il letterale dell'oggetto può specificare solo le proprietà conosciute e 'president' non esiste nel tipo 'Paese'

In questo caso, stavo cercando di memorizzare il nome del presidente come a stringa all'interno di una proprietà denominata Presidente. Dal momento che nessuna di queste proprietà è stata dichiarata, abbiamo ricevuto un errore. A volte, potresti voler specificare una proprietà solo per oggetti particolari e non per altri. In questi casi, è possibile contrassegnare la proprietà facoltativa all'interno della definizione della classe. Ne ho discusso in maggior dettaglio in un tutorial che copre le interfacce TypeScript.

Per ora, assicurati solo che i nomi di tutte le proprietà corrispondano ai nomi all'interno della definizione della classe. Assicurarsi inoltre che il valore di ogni proprietà abbia lo stesso tipo dichiarato nella definizione della classe.

Creazione di una classe CountryService

Dopo aver creato il nostro Nazione classe e PAESI array, ora possiamo finalmente scrivere alcune funzioni per elaborare i dati del paese. Dovremo importare entrambi i file Nazione classe e il PAESI array all'interno del nostro file di servizio. Il file dovrà importare il file PAESI array per avere accesso ai dati. Allo stesso modo, il file dovrà importare il file Nazione classe per dare un senso ai dati all'interno del PAESI schieramento.

Importeremo anche altre dipendenze come iniettabili dal nucleo angolare per rendere il nostro CountryService classe disponibile per l'iniettore da iniettare in altri componenti.

Una volta che la tua app cresce di dimensioni, i diversi moduli dovranno comunicare tra loro. Diciamo questo ModuleA richiede ModuleB per funzionare correttamente. In questi casi, chiameremmo ModuleB una dipendenza di ModuleA

Semplicemente importando il modulo di cui abbiamo bisogno in un altro file funziona la maggior parte del tempo. Tuttavia, a volte abbiamo bisogno di decidere se dovremmo creare una singola istanza di classi da ModuleB che verrà utilizzato dall'intera app o se dovremmo creare una nuova istanza ogni volta che viene utilizzato il modulo. Nel nostro caso, inietteremo una singola istanza del nostro CountryService classe in tutta l'app.

Ecco il codice per country.service.ts:

import Injectable da '@ angular / core'; importare Paese da "./country"; importare PAESI da './country-data'; @Injectable () classe di esportazione CountryService costruttore ()  getCountries (): Paese [] return COUNTRIES;  getPopulatedCountries (): Country [] return COUNTRIES.sort ((a, b) => b.population - a.population) .slice (0, 3);  getLargestCountries (): Country [] return COUNTRIES.sort ((a, b) => b.area - a.area) .slice (0, 3);  getGDPCountries (): Country [] return COUNTRIES.sort ((a, b) => b.gdp - a.gdp) .slice (0, 3);  getCountry (nome: stringa): Paese return COUNTRIES.find (country => country.name === name);  

Un @injectable decoratore viene utilizzato per identificare una classe di servizio che potrebbe richiedere dipendenze iniettate. Tuttavia, aggiungendo il @injectable alle classi di servizio è richiesto uno stile di codifica, quindi lo facciamo comunque.

Dopodiché, scriviamo diversi metodi per la classe che prendono il PAESI array e restituirlo direttamente o ordinarlo utilizzando determinati criteri e quindi restituire una parte dell'array. 

Il getCountries () il metodo dovrebbe restituire tutto il Nazione oggetti, e così restituisce il tutto PAESI array senza apportare modifiche.

Il getPopulatedCountries () prende il PAESI array e ordinarlo in ordine decrescente in base alla popolazione di diversi paesi. Quindi usiamo il metodo Array.slice () per restituire i primi tre paesi (con gli indici 0, 1 e 2) dall'array. Il getLargestCountries () e getGDPCountries () i metodi funzionano in modo simile.

Il getCountry () metodo prende un nome come argomento e restituisce l'oggetto country la cui proprietà name ha lo stesso valore dell'argomento name fornito.

Incluso CountryService in app.module.ts

Un servizio che crei è solo una classe in Angolare finché non lo hai registrato con un iniettore di dipendenze Angolare. Un iniettore angolare sarà il responsabile della creazione di istanze di servizio e l'iniezione in classi diverse che necessitano di tale servizio. Abbiamo bisogno di registrare un servizio con un fornitore prima che l'iniettore possa creare quel servizio.

Esistono due modi comuni per registrare qualsiasi servizio: utilizzando a @Componente fornitore o utilizzando il @NgModule fornitore. Usando il @Componente il provider ha senso quando si desidera limitare l'accesso di un servizio a un particolare componente ea tutti i suoi componenti nidificati. Usando il @NgModule il fornitore ha senso quando si desidera che più componenti abbiano accesso al servizio.

Nel nostro caso, useremo CountryService con più componenti della nostra app. Ciò significa che dovremmo registrarlo con il @NgModule fornitore una volta, invece di registrarlo separatamente con il @Componente fornitore di ciascun componente. 

Attualmente, il tuo app.module.ts il file dovrebbe assomigliare a questo:

importare BrowserModule da '@ angular / platform-browser'; import NgModule da '@ angular / core'; importare AppComponent da './app.component'; @NgModule (dichiarazioni: [AppComponent], importazioni: [BrowserModule], provider: [], bootstrap: [AppComponent]) classe di esportazione AppModule  

Aggiungi una dichiarazione di importazione al app.module.ts file e aggiungere il servizio al @NgModule matrice di fornitori. Dopo aver apportato queste modifiche, il tuo app.module.ts il file dovrebbe assomigliare a questo:

importare BrowserModule da '@ angular / platform-browser'; import NgModule da '@ angular / core'; importare AppComponent da './app.component'; importare CountryService da './country.service'; @NgModule (dichiarazioni: [AppComponent], importazioni: [BrowserModule], provider: [CountryService], bootstrap: [AppComponent]) classe di esportazione AppModule  

Il CountryService la classe sarà ora disponibile per tutti i componenti che creiamo per la nostra app.

Pensieri finali

Creazione di tre file con successo country.ts, country-data.ts, e country.service.ts conclude il secondo tutorial di questa serie.

Il country.ts il file viene utilizzato per creare un Nazione classe con proprietà diverse come nome, valuta, popolazione, area, ecc country-data.ts il file viene utilizzato per memorizzare una serie di oggetti Paese che contengono informazioni su diversi paesi. Il country.service.ts il file contiene una classe di servizio con metodi diversi per accedere ai dati del Paese da PAESI array. Scrivere tutti questi metodi separatamente all'interno di una classe di servizio ci consente di accedervi all'interno di diversi componenti dell'app da una posizione centrale.

Nell'ultima sezione, abbiamo registrato il nostro servizio con il @NgModule fornitore per renderlo disponibile per l'uso all'interno di diversi componenti.

Il prossimo tutorial ti mostrerà come creare tre diversi componenti nella tua app per visualizzare i dettagli del Paese e un elenco di paesi.