Creación y uso de servicios en Angular para lógica de negocio
Resumen
Un servicio es la forma que utiliza Angular para modular una aplicación y crear código reutilizable, este tendrá una determinada lógica de negocio que puede ser usada por varios componentes u otros servicios.
Tu primer servicio
Con el CLI de Angular, crea un servicio fácilmente con el comando ng generate service test-name o en su manera corta ng g s test-name. Dicho comando creará dos archivos:
test-name.service.ts
test-name.service.spec.ts
Siendo el archivo .ts el servicio en sí y el archivo .spec.ts el que podrás usar para escribir pruebas unitarias para testear el servicio.
El servicio tendrá por defecto el siguiente código:
Paso 2: Luego, importa en un componente el servicio de la siguiente manera:
// components/catalogo/catalogo.component.tsimport{TestNameService}from'src/app/services/test-name.service';@Component({selector:'app-catalogo',templateUrl:'./catalogo.component.html',styleUrls:['./catalogo.component.scss']})exportclassCatalogoComponentimplementsOnInit{// ...constructor(privatetestNameService:TestNameService,){}ngOnInit():void{const name =this.testNameService.getTestName();console.log(name);}}
En el constructor del componente, se inyecta el servicio para poder ser utilizado posteriormente.
En este ejemplo, estamos llamando en el ngOnInit() el método getTestName() del servicio para obtener el valor de una variable e imprimirla por consola.
De esta manera, puedes tener tu lógica de negocio en un servicio e importar este en N componentes, o incluso en otros servicios y acceder a sus métodos y propiedades.
Contribución creada con los aportes de Kevin Fiorentino.
g=generar
c=componente
s=servicio
ng g c componente //-> generar componenteng g s servicio //-> generar servicios
Cool Diego, gracias por tu aporte amigo!
Más claro no canta un gallo, después de haber visto y asimilado lo más posible de todo el curso después de verlo como en 3 o 4 veces, ahora en la quinta voy clarificando y entendiendo mejor.
Creo que me faltan otras 7 repasadas., ja ja.
Servicios
Los servicios es el lugar en donde se define la lógica del negocio de la aplicación, con el objetivo que se reutilizable e independiente de los componentes.
Ahora que empiezo a trabajar como developer jr, estuve usando inyección de dependencias sin siquiera saberlo, ahora que hago este curso porque tengo que desarrollar un proyecto en Angular para el trabajo me queda mucho mas claro
En la documentacion encontre lo siguiente
Llamarlo en ngOnInit()
Si bien podría llamar a getHeroes() en el constructor, esa no es la mejor práctica.
Reserve el constructor para una inicialización simple, como conectar los parámetros del constructor a las propiedades. El constructor no debe hacer nada. Ciertamente no debería llamar a una función que realiza solicitudes HTTP a un servidor remoto como lo haría un servicio de datos real.
Excelente curso queda claro la inyección de dependencias.
Muy interesante la clase, conocer y saber que desde servicios puedo dejar la logica en una carpeta diferente sin afectar el resultado esperado. 😁
Si el constructor se ejecuta una sola vez, porque se actualiza el atributo "this.myShoppingCart" que está dentro del constructor, cada vez que agregamos un carrito? si agrego el "this.total" al constructor no lo actualiza.
Justamente venia a preguntar lo mismo. Ojala y llegue alguien que si sepa
justo tenia la misma duda... se que leemos la variable con un string interpolation en el html pero en el constructor no debería actualizarse por ejecutarse una vez
estoy siguiendo el curso, cuando se agrega un nuevo producto al array ustedes usas push() para hacerlo "this.myShoppingCart.push(product);" pero yo estaba usandolo de esta manera "this.myShoppingCart = [ ...this.myShoppingCart, product ];" antes de usar la inyeccion de dependencia funcionaba el contado perfectamente pero despues ya no, encontre que si se seguia usando mi opcion no fucionaria, en este caso funciona con push. por que pasa esto?
Está bien interesante este caso. Puede que con mi respuesta me equivoque, pero lo que creo que pasa es que:
Se está perdiendo la referencia del arreglo. Ya que lo que estás haciendo, es crear un nuevo arreglo, al hacerlo de la manera que lo haces (inmutabilidad)
Por lo que, tendrías que meter la línea que está dentro del constructor:
Dentro del método que se ejecuta cada que se agrega un producto al carrito. Diciendo. Se agregó un nuevo producto, pásame esa lista para que ahora sea la myShoppingCart del componente products. De esta manera tu contador seguirá funcionando.
Cuando en el storeestás usandola función push() o cualquier otra, para manipular el arreglo, estás mutando el mismo arreglo que pasaste como referencia cuando se ejecutó el constructor del componente products.
Es porque estas creando otra referencia distinta a la original usando el spread operator ... (los 3 puntos) y como en el ejemplo está devolviendo la referencia original denrto del constructor de products.component, por eso al usar el spread operator al añadir producto ya no apunta mas a la referencia original, espero haberte ayudado.
Servicios en Angular
En Angular, los servicios son una forma de compartir datos y lógica entre componentes. Se pueden utilizar para compartir datos con el servidor, realizar cálculos y operaciones complejas, y mucho más.
Para generar un servicio en Angular, se puede utilizar el siguiente comando en la terminal:
ng generate service nombre-del-servicio
ng g s nombre-del-servicio
Esto generará un archivo .ts que contendrá la clase del servicio, con un decorador @Injectable()
que permite la inyección de dependencias.
Para utilizar el servicio en un componente, se debe instanciar en el constructor del componente:
Luego, se puede llamar a cualquier método o propiedad del servicio en el componente utilizando el nombre del servicio y el método o propiedad correspondiente, por ejemplo:
this.nombreDelServicio.metodoDelServicio();
No me agrada la rapidez con que intenta explicar, la verdad me marea bastante y me hace perder concentración, debería ser mas pausado la forma como va explicando para que nosotros los aprendices entendamos mejor, el mensaje o conocimiento que intentamos aprender se pierde, parece que estuviese apurado en terminar el video. No me agrado la verdad.
necesitas practicar más, la programación no es teoría solamente
En serio tenía muchas ganas de llegar a esta parte del Curso, me encantó esta clase de 'Conociendo los servicios'.
hay una mosca en el video
Todavia tengo dudas sobre los servicios, fuera del ejemplo del profe, como que otro ejemplo se puede considerar un servicio en un proyecto ?
Para el consumo de APIS REST por ejemplo, es decir cualquier información que genere una gestión de datos y no tenga que ver con el render de esta debería ser considerado un servicio.
Agregue un contador en el nav, pero solo se muetra el valor inicial. Como hago para que se actualize?
Hola, no se cargo la imagen. Si regresas a la anterior clase estoy seguro que lo puedes lograr, pero si no es así, como el profesor indica deberías considerar tomar el curso de manipulación de arrays
Creo que si storeService va a ser inicializado desde el constructor y nunca va a ser modificado (supongo que esa es la gracia de que sea un servicio) debería ser un readonly mas que un private verdad?