DAWM

Regresar

Angular - Servicios

Los componentes NO deben obtener o guardar datos directamente y no deben presentar datos falsos. Los componentes deben centrarse en presentar datos y delegar el acceso a los datos a un servicio.

Un servicio es un proveedor de datos, que mantiene lógica de acceso a ellos. Los servicios serán consumidos por los componentes, que delegarán en ellos la responsabilidad de acceder a la información y la realización de operaciones con los datos.

Proyecto en Angular


Utiliza el proyecto que desarrollaste con los tutoriales de Angular - Local, Angular - Boostrap, Angular - Componentes, Comunicación y Directivas

Interfaz

Para consultar datos mediante servicios, es recomendable el uso de interfaces para reconocer su estructura. Desde la raíz del proyecto con Angular

Servicio

Desde la raíz del proyecto con Angular

Inyección de dependencias

Las dependencias son servicios u objetos que una clase necesita para realizar su función. La inyección de dependencia (DI) es un patrón de diseño en el que una clase solicita dependencias de fuentes externas en lugar de crearlas, para aumentar la flexibilidad y modularidad en sus aplicaciones. Angular proporciona dependencias a una clase en la creación de instancias.

Para inyectar una dependencia en un componente solo debes agregar un argumento (con el tipo de la dependencia) en el método constructor de la clase.

Peticiones HTTP

Las aplicaciones en el front-end necesitan comunicarse con un servidor a través del protocolo HTTP, para descargar o cargar datos y acceder a otros servicios back-end. Angular proporciona una API HTTP de cliente para aplicaciones Angular, la clase de servicio HttpClient en @angular/common/http.

Para este caso, Angular usa los observables en lugar de promesas para entregar valores de forma asíncrona.

Uso del servicio en el componente

Ahora, para acabar esta introducción a los servicios en Angular, tenemos que ver cómo usaríamos el servicio RecursosService en el componente AppComponent.

Reemplace el contenido de:

<div class="album py-5 bg-light">
	<div class="container">
		<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
		
		...

		</div>
	</div>
</div>

Por el arreglo fotos renderizado con la directiva @for, o *ngFor.

<div class="album py-5 bg-light">
	<div class="container">
		<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
      
      			@for (foto of fotos; track foto.id) {
				<div class="col">
				  <div class="card shadow-sm">
				    <img src="{{foto.url}}" alt="{{foto.id}}">

				    <div class="card-body">
				      <p class="card-text">{{foto.descripcion}}</p>
				      <div class="d-flex justify-content-between align-items-center">
				        <div class="btn-group">
				          <button type="button" class="btn btn-sm btn-outline-secondary">View</button>
				          <button type="button" class="btn btn-sm btn-outline-secondary">Edit</button>
				        </div>
				        <small class="text-muted">9 mins</small>
				      </div>
				    </div>
				  </div>
				</div>
      			}

		</div>
	</div>
</div>

Referencias