Angular: T3-componentes del la APP

Una app es una aplicación de software diseñada para funcionar en dispositivos móviles, como smartphones y tabletas.

¿Qué es un componente?

Un componente es una parte de la web que tiene vista, estilos y lógica. En otras palabras, con los componentes web puedes crear tus propias etiquetas HTML que podrás reusar en toda la página web. Los componentes suelen recibir una propiedad o varias que sirven de entrada para la configuración (por ejemplo a los inputs le puedes pasar el tipo: text, password, email...).

En Angular los componentes tienen un archivo por cada parte del componente, es decir, se suele crear un archivo.html app.component.html para la vista, otro archivo.ts (typescript) app.component.ts para la lógica del componente y otro archivo.css o archivo.scss app.component.css para los estilos del componente. Dentro del componente, en archivo.ts, app.component.ts se definen las variables, se crean los métodos, se recogen y preparan los datos para pasarlos a la vista.

 Todos los componentes deben tener:

 Una clase de TypeScript    class AppComponent    con comportamientos como manejar la entrada del usuario y obtener datos de un servidor
  Una plantilla HTML    templateUrl: './app.component.html',    que controla lo que se convierte en el DOM
  Un selector de CSS    styleUrl: './app.component.css'    que define cómo se utiliza el componente en HTML

Video tutoriales: 

  1. Angular (v18) desde cero - 02 Componentes   https://youtu.be/dc8uiXLylUU
  2. Componentes STANDALONE en Angular  https://youtu.be/FUXM-Qxvfqg
  3.   Estructura de carpetas de Angular:   https://youtu.be/NPnTuSmJH2c?t=153
  4.  Angular 2023 #2 Componentes: https://youtu.be/CoW-Rpt9POY
  5. Carpetas en un proyecto de Angular APP - 28 Días:  https://youtu.be/UW09Ky62fzo
  6. Standalone Component | Curso Angular 18   https://youtu.be/lL2wA3YT86M
  7.   CURSO ANGULAR 17: COMPONENTES - DATABINDING:  https://youtu.be/g8geh3lFpBg
  8.   Creando el proyecto = Consumir API RESThttps://youtu.be/1XThP-q9jI4


Creando componentes en Angular

Existen dos maneras de hacerlo: la método automático y el manual.
 

Método automático: Angular CLI

// Opciones para generar componentes en angular
// Generando 4 componetes: html, css, ts, test
ng generate component
ng g c

// Generando 3 componetes: html, ts, test
ng g c --inline-style

  // Generando 3 componetes: css, ts, test
  ng g c --inline-template

  // Generando 3 componetes: html, css, ts
  ng g c --skip-tests

// Generando 2 componetes: html, ts
ng g c --inline-style --skip-tests

  // Generando 2 componetes: ts, test
  ng g c --inline-template --inline-style

// Generando 1 componete: ts
ng g c --inline-template --inline-style --skip-tests

 

Vamos a crear un componente que sirva para crear el menú principal de una web y que lo queremos llamar navbar por el momento. Tan solo tienes que ejecutar en la terminal:

 ng generate component navbar 


La última palabra es el nombre del componente. Si es un componente de varias palabras, recomiendo que le des un nombre en kebab-case, es decir, separada cada palabra por un guión, por ejemplo: user-list.

Si navegamos ahora a la carpeta app del proyecto veremos que Angular CLI ha creado por nosotros una carpeta llamada navbar. Dentro de la carpeta navbar se ha creado un archivo.css, un archivo.html y un archivo.ts (controlador) junto con un archivo.spec.ts (este archivo es para los tests).

Luego debemos importar el nuevo componente    class NavbarComponent    en el archivo  app.component.ts . El archivo  app.component.ts  sirve para declarar los componentes a nivel global para poder reutilizarlos más tarde.

    //app.component.ts 
import {NavbarComponent} from "./navbar/navbar.component"; 

@Component({
  imports: [NavbarComponent],
})

La estructura quedaria de la siguiente Forma:

 

Método manual

Lo único que tienes que hacer es generar una nueva carpeta dentro de la carpeta app con el nombre del componente que quieras. Dentro de la carpeta creas un archivo que se llame nombre-componente.component.ts, por ejemplo navbar.component.ts. Dentro de ese componente escribes esta estructura: 


// app/navbar/navbar.component.ts

import { Component } from "@angular/core";

@Component({
  selector: "app-navbar",
  standalone: true,
  imports: [],
  templateUrl: "./navbar.component.html",
  styleUrls: ["./navbar.component.css"],
})
export class NavbarComponent {}


Crear el archivo nombre-componente.component.html y nombre-componente.component.css, por el momento vacíos. Para el ejemplo del componente de navbar lo que hago es crear: navbar.component.html y navbar.component.css.

Por último tendrás que importar el componente dentro del archivo    app.component.ts    que como hemos dicho se encarga de definir los componentes que puedes usar. Para nuestro ejemplo:


// app.component.ts 

import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import {NavbarComponent} from "./navbar/navbar.component";

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet, NavbarComponent],
  templateUrl: './app.component.html',
  styleUrl: './app.component.css'
})
export class AppComponent { title = 'practica1_app1'; }


Estructura básica de los componentes

Un componente    navbar.component    en Angular debería tener 3 archivos, uno .html, otro .ts y otro .css o .scss.

Dentro del .html puedes escribir código HTML y dentro del .css o .scss se escriben los estilos que va a tener ese componente. Los estilos CSS que apliques en ese archivo solo afectarán a ese componente y no afectará a otros componentes.

Veamos ahora el archivo .ts también llamado controlador que es el que define la lógica del componente. La estructura básica es esta:

// app/navbar/navbar.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-navbar',
  standalone: true,
  imports: [],
  templateUrl: './navbar.component.html',
  styleUrl: './navbar.component.css'
})
export class NavbarComponent { }

El objeto que se pasa al decorador    @Component    se denomina metadatos del componente . Esto incluye las propiedades   selector  ,   template  , y otras propiedades.

Lo primero que se hace es importar Component de    @angular/core   . Esto sirve para poder invocar un método que recibe un objeto con la configuración del componente. Dentro de esa configuración hay cinco propiedades: 

selector: El selector es el nombre que va a tener la etiqueta HTML que sirve para poder usar este componente, para este ejemplo del navbar será  <app-navbar>    </app-navbar>  .  o es usu codigo corto    <app-navbar/>  

Los  standalone: true, son  componentes independientes que importan directamente otros componentes, directivas y canalizaciones utilizados en sus plantillas:

templateUrl: La ruta al fichero .html de ese componente para crear la vista.

styleUrl: La ruta al fichero .css de ese componente para crear la vista.

¡OJO!. El nombre que usas cuando exportas el componente (NavbarComponent) es el que luego tienes que poner entre llaves para importar el componente dentro del    app.component.ts   , en este caso: 


import { NavbarComponent } from "./navbar/navbar.component";

 

Cómo usar los componentes dentro de otros

Si ya has creado el componente (NavbarComponent), puedes añadir la etiqueta en el archivo.html y si ya lo tienes importado correctamente en el    app.component.ts   , puedes probar que el componente funciona correctamente simplemente creando etiqueta dentro del archivo app.component.html.

En mi caso he borrado todo el contenido del archivo y he puesto:


<!-- app.component.html -->
<div>
<app-navbar></app-navbar>
<app-navbar/>
</div>

Si el archivo.html del componente que has creado tiene algún contenido podrás verlo si te abres la página en el navegador (http://localhost:4200/).

....