Cree su primera aplicación angular almacenamiento y acceso a datos

En el primer tutorial de la serie, aprendimos cómo empezar para crear una aplicación Angular. Después de completar con éxito ese tutorial, ahora debería tener su primera aplicación Angular en funcionamiento con el título "Datos divertidos sobre los países". Antes de crear cualquier componente que se pueda representar en la pantalla, crearemos algunas clases y definiremos algunas funciones que hacen que esos componentes sean útiles..

En este tutorial, nuestro enfoque estará en crear un País Clase que contendrá diferentes propiedades cuyo valor queremos mostrar al usuario. Luego crearemos otro archivo llamado datos del país.ts. Este archivo contendrá información sobre todos los países en nuestra aplicación. Nuestro tercer archivo será nombrado pais.service.ts. El nombre puede sonar elegante, pero el archivo solo contendrá un Servicio País Clase con toda la funcionalidad necesaria para recuperar y ordenar la información proporcionada por el archivo. datos del país.ts.

Creación de una clase de país

Dentro de src / app carpeta de su aplicación Angular, cree un archivo llamado pais.ts. Agrega el siguiente código dentro de él.

clase de exportación País nombre: cadena; capital: cuerda; área: número; población: número; moneda: cadena; gdp: número;  

El código de TypeScript anterior define la País clase con seis propiedades diferentes para almacenar información sobre diferentes países. El nombre del país, su capital y su moneda se almacenan como una cadena. Sin embargo, su área, población y PIB se almacenan como un número. Estaremos importando el País clase en muchos lugares, así que he añadido el exportar palabra clave antes de la definición de la clase.

Creando una matriz de países

El siguiente paso incluye crear una datos del país.ts archivo para almacenar la información sobre todos los países como una matriz de País objetos. Estaremos importando el País clase en este archivo y luego exportar una const llamado PAÍSES que almacena una gran variedad de objetos de país. 

Aquí está el código para datos del país.ts. Al igual que pais.ts, Tienes que crear este archivo dentro de la src / app carpeta.

importar País desde './campo'; exportar PAÍSES: País [] = [nombre: 'Rusia', capital: 'Moscú', área: 17098246, población: 144463451, moneda: 'Rublo ruso', gdp: 1283162, nombre: 'Canadá', capital : 'Ottawa', área: 9984670, población: 35151728, moneda: 'Dólar canadiense', gdp: 159760, nombre: 'China', capital: 'Beijing', área: 9596961, población: 1403500365, moneda: 'Renminbi (Yuan) ', gdp: 11199145, nombre:' Estados Unidos ', capital:' Washington, DC ', área: 9525067, población: 325365189, moneda:' Dólar estadounidense ', gdp: 18569100, nombre: 'Japón', capital: 'Tokio', área: 377972, población: 12676200, moneda: 'Yen', gdp: 4939384]; 

La primera línea en este archivo importa el País clase de la pais.ts Archivo ubicado en el mismo directorio. Si elimina esta línea del archivo, TypeScript le dará el siguiente error:

No se puede encontrar el nombre 'País'.

Sin la declaración de importación, TypeScript no tendrá idea de qué tipo de matriz País medio. Así que asegúrese de haber importado la clase correcta y de haber especificado la ubicación de pais.ts correctamente.

Después de importar el País clase, seguimos adelante y creamos una serie de País objetos. Importaremos este conjunto de países para usar dentro de otros archivos, así que agregamos un exportar palabra clave para esta matriz también. Actualmente, hay cinco diferentes País objetos en la matriz. Cada uno de estos cinco objetos proporciona pares clave-valor que enumeran el nombre de una propiedad y su valor para un objeto o país en particular.

Si intenta agregar una propiedad adicional a la matriz que no se ha declarado dentro del País definición de la clase, obtendrá el siguiente error:

El literal de objeto solo puede especificar propiedades conocidas, y 'presidente' no existe en el tipo 'País'

En este caso, estaba tratando de almacenar el nombre del presidente como un cuerda dentro de una propiedad llamada presidente. Como no se declaró tal propiedad, obtuvimos un error. A veces, es posible que desee especificar una propiedad solo para objetos particulares y no para otros. En tales casos, puede marcar la propiedad opcional dentro de la definición de clase. Lo he discutido con más detalle en un tutorial que cubre las interfaces de TypeScript.

Por ahora, solo asegúrese de que los nombres de todas las propiedades coincidan con los nombres dentro de la definición de la clase. Asegúrese también de que el valor de cada propiedad tenga el mismo tipo que el declarado en la definición de clase.

Creación de una clase de CountryService

Después de crear nuestro País clase y PAÍSES Array, finalmente podemos escribir algunas funciones para procesar los datos del país. Tendremos que importar tanto el País clase y la PAÍSES matriz dentro de nuestro archivo de servicio. El archivo necesitará importar el PAÍSES matriz para tener acceso a los datos. Del mismo modo, el archivo tendrá que importar el País clase con el fin de dar sentido a los datos dentro de la PAÍSES formación.

También estaremos importando otras dependencias como Inyectable desde el núcleo angular para hacer nuestra Servicio País Clase disponible para inyectar en otros componentes..

Una vez que su aplicación crezca, será necesario que los diferentes módulos se comuniquen entre sí. Digamos que Módulo A requiere ModuleB para funcionar correctamente. En tales casos, llamaríamos ModuleB una dependencia de Módulo A

Simplemente importar el módulo que necesitamos en otro archivo funciona la mayor parte del tiempo. Sin embargo, a veces tenemos que decidir si debemos crear una instancia única de clases a partir de ModuleB Eso será utilizado por toda la aplicación o si debemos crear una nueva instancia cada vez que se usa el módulo. En nuestro caso, inyectaremos una sola instancia de nuestro Servicio País clase en toda la aplicación.

Aquí está el código para pais.service.ts:

importar Inyectable desde '@ angular / core'; importar País desde './campo'; importar COUNTRIES desde './country-data'; @Injectable () clase de exportación CountryService constructor ()  getCountries (): Country [] 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 (name: string): Country return COUNTRIES.find (country => country.name === name);  

Un @inyectable El decorador se utiliza para identificar una clase de servicio que podría requerir dependencias inyectadas. Sin embargo, añadiendo el @inyectable Para clases de servicio es un estilo de codificación requerido, así que lo hacemos de todos modos.

Después de eso, escribimos diferentes métodos para la clase que toman la PAÍSES array y devuélvalo directamente u ordénelo según ciertos criterios y luego devuelva una parte del array. 

los getCountries () Se espera que el método devuelva todo el País Objetos, y así devuelve el conjunto. PAÍSES Arreglo sin hacer ninguna modificación..

los getPopulatedCountries () toma el PAÍSES Arregle y clasifique en orden descendente en función de la población de diferentes países. Luego utilizamos el método Array.slice () para devolver los tres primeros países (con los índices 0, 1 y 2) de la matriz. los getLargestCountries () y getGDPCountries () Los métodos funcionan de manera similar..

los getCountry () el método toma un nombre como argumento y devuelve el objeto de país cuya propiedad de nombre tiene el mismo valor que el argumento de nombre proporcionado.

Incluyendo CountryService en app.module.ts

Un servicio que usted crea es solo una clase en Angular hasta que lo haya registrado con un inyector de dependencia Angular. Un inyector angular será el responsable de crear las instancias de servicio e inyectarlas en diferentes clases que necesiten ese servicio. Necesitamos registrar un servicio con un proveedor antes de que el inyector pueda crear ese servicio.

Hay dos formas comunes de registrar cualquier servicio: usando un @Componente proveedor o utilizando el @NgModule proveedor. Utilizando la @Componente El proveedor tiene sentido cuando desea restringir el acceso de un servicio a un componente en particular y a todos sus componentes anidados. Utilizando la @NgModule El proveedor tiene sentido cuando desea que múltiples componentes tengan acceso al servicio.

En nuestro caso, estaremos utilizando Servicio País Con múltiples componentes de nuestra aplicación. Esto significa que deberíamos registrarlo con el @NgModule proveedor una vez, en lugar de registrarlo por separado con el @Componente proveedor de cada componente. 

Actualmente, tu app.module.ts el archivo debería verse así:

importe BrowserModule desde '@ angular / platform-browser'; importe NgModule desde '@ angular / core'; importe AppComponent desde './app.component'; @NgModule (declaraciones: [AppComponent], importaciones: [BrowserModule], proveedores: [], bootstrap: [AppComponent]) clase de exportación AppModule  

Añadir una declaración de importación a la app.module.ts Archivo y agregar el servicio a la @NgModule matriz de proveedores Después de hacer estos cambios, tu app.module.ts el archivo debería verse así:

importe BrowserModule desde '@ angular / platform-browser'; importe NgModule desde '@ angular / core'; importe AppComponent desde './app.component'; importe CountryService desde './country.service'; @NgModule (declaraciones: [AppComponent], importaciones: [BrowserModule], proveedores: [CountryService], bootstrap: [AppComponent]) export class AppModule  

los Servicio País La clase ahora estará disponible para todos los componentes que creamos para nuestra aplicación..

Pensamientos finales

Creando exitosamente tres archivos nombrados pais.ts, datos del país.ts, y pais.service.ts Concluye el segundo tutorial de esta serie..

los pais.ts archivo se utiliza para crear una País clase con diferentes propiedades como nombre, moneda, población, área, etc. datos del país.ts archivo se utiliza para almacenar una matriz de objetos de país que tienen información sobre diferentes países. los pais.service.ts archivo contiene una clase de servicio con diferentes métodos para acceder a los datos del país desde el PAÍSES formación. Escribir todos estos métodos por separado dentro de una clase de servicio nos permite acceder a ellos desde diferentes componentes de aplicaciones desde una ubicación central.

En la última sección, registramos nuestro servicio con la @NgModule Proveedor para que esté disponible para su uso dentro de diferentes componentes..

El siguiente tutorial le mostrará cómo crear tres componentes diferentes en su aplicación para mostrar los detalles del país y una lista de países.