ANgular
ANgular
ANgular
[2018]
Introducción a Angular
Desde su creación hace ya más de 4 años, Angular ha sido el framework
preferido por la mayoría de los desarrolladores Javascript. Este éxito ha
provocado que los desarrolladores quieran usar el framework para más y más
cosas.
Javascript:
Node y npm
Angular CLI es una herramienta NodeJS, es decir, para poder instalarla
necesitaremos contar con NodeJS instalado en nuestro sistema operativo,
algo que podemos conseguir muy fácilmente yendo a la página de
https://nodejs.org y descargando el instalador para nuestro sistema.
ng --help
ng new mi-nuevo-proyecto-angular
Lanzado este comando se creará una carpeta igual que el nombre del
proyecto indicado y dentro de ella se generarán una serie de subcarpetas y
archivos que quizás por su número despisten a un desarrollador que se inicia
en Angular. Si es así no te preocupes porque poco a poco nos iremos
familiarizando con el código generado.
cd mi-nuevo-proyecto-angular
Servir el proyecto desde un web server
Angular CLI lleva integrado un servidor web, lo que quiere decir que
podemos visualizar y usar el proyecto sin necesidad de cualquier otro
software. Para servir la aplicación lanzamos el comando "serve".
ng serve
http://localhost:4200/
Archivos sueltos:
Encontrarás varios archivos sueltos en la carpeta raíz de tu proyecto. Te
señalamos algunos importantes que debes conocer:
index.html
Este archivo es información básica del proyecto recién creado. Te puede dar
una idea inicial de qué es lo que encontrarás en estas carpetas y cómo usar el
proyecto. Complementará sin duda las explicaciones de este manual de
Angular. Encontrarás algunos comandos explicados del CLI, como "ng
serve" el cuál ya hemos tratado, para servir el proyecto. También comentará
que tienes que hacer para realizar el build, comando "ng build" y llevar a
producción una aplicación.
.angular-cli.json
Es un archivo oculto (en Linux o Mac, pues comienza por ".") en el que se
almacenan configuraciones del CLI de Angular.
package.json
Este es el archivo que resume las dependencias del proyecto, las librerías
sobre las que nos apoyamos, que se gestionan por medio de npm.
tslint.json
Este archivo sirve para configurar el linter, el programa que nos alertará
cuando tengamos problemas de estilo en el código.
.editorconfig
Este es un archivo que sirve para definir la configuración para el editor de
código que estemos utilizando. Permite centralizar la configuración, de
modo que sea común para todos los desarrolladores que vayan a trabajar en
el proyecto.
Carpeta src
Es la carpeta donde están las fuentes del proyecto. Esta carpeta es la que
usaremos para desarrollar la aplicación y donde iremos colocando
componentes y otro tipo de artefactos necesarios para poner en marcha
nuestras ideas.
<app-root></app-root>
Otro de los detalles que encontrarás en "src" son varios archivos con
extensión ".ts". Son archivos con código TypeScript. Recuerda que en
Angular se programa usando TypeScript y que en el proceso de transpilado
de la web, realizado por WebPack, ese código pasará a traducirse a
Javascript. No hace falta que te preocupes mucho todavía, pues ya lo
estudiaremos con calma. Puedes abrir si quieres el main.ts, que es el código
de TypeScript principal de la aplicación, el punto de inicio de ejecución,
aunque ya te advertimos que este archivo prácticamente no lo tendremos que
tocar.
Dentro de "src" encontrarás también una carpeta llamada "app", que contiene
el código del componente principal, que está dividido en varios archivos. Si
abres el archivo ".html" verás el código de presentación del componente, que
es el que se muestra cuando se visualiza la aplicación recién creada.
Carpeta node_modules
Es la carpeta donde npm va colocando todas las dependencias del proyecto,
es decir, el código de todas las librerías o componentes que estemos usando
para basarnos en el desarrollo de una aplicación. Por ejemplo, el propio
Angular es una dependencia.
dist:
Public:
node_modules:
Son los archivos de las dependencias que mantenemos vía npm. Por tanto,
todas las librerías que se declaren como dependencias en el archivo
package.json deben estar descargados en esta carpeta node_modules. Esta
carpeta podría haber estado dentro de src, pero está colgando de la raíz
porque vale tanto para las pruebas, como para la aplicación cuando la estás
desarrollando.
tmp:
Typings:
Esto son definiciones de tipos usados por las librerías que usa un proyecto
en Angular . Estos tipos te sirven para que el editor, gracias a TypeScript,
pueda informarte con el "intellisense" en el acto de escribir código, sobre las
cosas relacionadas con esas librerías.
De momento eso es todo, esperamos que esta vista de pájaro te sirva de
utilidad para reconocer la estructura básica de un proyecto a desarrollar con
Angular . En el siguiente artículo entraremos en detalle ya sobre el código,
analizando por dentro algunas de estas carpetas y archivos generados desde
Angular CLI y realizando nuestras primeras pruebas.
Código de una aplicación Angular
Index.html
Es de sobra sabido que las aplicaciones web comienzan por un archivo
llamado index.html. Con Angular además, dado que se construyen páginas
SPA (Single Page Application) es todavía más importante el index.html,
pues en principio es el archivo que sirve para mostrar cualquier ruta de la
aplicación.
Archivo main.ts
Como hemos visto, no existe un Javascript definido o incluido en el
index.html, pero sí se agregará más adelante para que la aplicación funcione.
De hecho, si pones la aplicación en marcha con "ng serve -o" se abrirá en tu
navegador y, al ver el código fuente ejecutado podrás ver que sí hay código
Javascript, colocado antes de cerrar el BODY del index.html.
Obviamente, para profundizar habría que entender qué es cada import de los
que se van realizando, los cuales tendremos tiempo de analizar llegado el
momento. Además de los imports, que es código que se va requiriendo, hay
un detalle que encontramos al final del fichero:
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
Al final, el bootstrap provocará que Angular lea el código del módulo y sepa
qué componentes existen en el index, para ponerlos en marcha, provocando
que la aplicación empiece a funcionar, tal como se haya programado.
Fíjate que para arrancar la aplicación se hace uso de los elementos que hemos
importado en las líneas anteriores, entre ellos platformBrowserDynamic y
AppModule.
Archivo app.module.ts
De entre todos los imports que se hace en el main.ts hay uno fundamental,
que nos sirve para tirar del hilo y ver qué es lo que está pasando por abajo,
para hacer posible que todo comience a funcionar. Se trata de app.module.ts,
que podemos considerar como el módulo principal de la aplicación. En este
fichero nos encontramos, como viene ya siendo habitual, varios imports de
elementos que vienen de otros módulos, pero hay además dos cosas que
pueden ser clave para entender el flujo de ejecución.
Import de nuestro componente raíz
En el módulo principal, app.module.ts, encontramos el import al componente
raíz de la aplicación (esa etiqueta HTML no-estándar que aparecía en el
BODY del index).
Decorador @NgModule
Esta es la primera vez que quizás estás conociendo los decoradores, algo que
viene directamente otorgado por TypeScript. Los decoradores permiten
asignar metadata a funciones, clases u otras cosas. Las funciones decoradoras
tienen un nombre y las usamos para asignar esos datos, que podrían
modificar el comportamiento de aquello que se está decorando.
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
Como ves, a la función decoradora la alimentamos con un objeto pasado por
parámetro, en el que indicamos diversos datos útiles para la clase
AppModule. Este decorador se irá editando y agregando nuevas cosas a
medida que vayamos desarrollando, por lo que nos resultará bastante familiar
a poco que comencemos a desarrollar con Angular.
<app-root></app-root>
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
El selector o etiqueta que implementa este componente: "app-root".
Justamente es la etiqueta extraña que había en el index.html.
El archivo .html su template: "./app.component.html".
Los estilos CSS que se usan en el componente: "./app.component.css"
Con lo que acabas de ver, será fácil abrir encontrar el archivo donde está el
template. ¿no? Puedes abrirlo y verás el código HTML que aparecía al poner
en marcha la aplicación. (Comando "ng serve -o" del CLI)
package.json
Vamos a comenzar por analizar este archivo, ya que muchas cosas son
declaradas inicialmente en él. Al analizar este archivo encontraremos el
origen de muchas de las librerías que usa Angular .
SystemJS
Para comenzar por nuestro análisis del código, vamos a abrir el archivo
"src/index.html". Como dijimos, la carpeta src es donde se encuentran las
fuentes de tu proyecto. En ella encontramos un index.html que es la raíz de
la aplicación. Todo empieza a ejecutarse a través de este archivo.
<script>
System.import('system-config.js').then(function () {
System.import('main');
}).catch(console.error.bind(console));
</script>
Encontramos el objeto "System", que es una variable global definida por la
librería SystemJS. Por medio del método "import" consigue cargar módulos.
Apreciarás que se está cargando inicialmente un archivo llamado "system-
config.js".
Por su parte la referencia a "main" que teníamos antes en los import del
index.html System.import('main'), es un import. No le ponen ni siquiera la
extensión del archivo "main.js" y esto es porque "main" es un alias declarado
en el system-config.ts. Fíjate en el código del archivo, en estas líneas:
<mi-nombre-proyecto-app>Loading...</mi-nombre-proyecto-app>
Ese es el componente raíz de nuestra aplicación Angular . Hablaremos de
componentes con detalle más adelante. De momento para lo que te interesa
a ti, que es reconocer el flujo de ejecución básico, hay que decir que su
código está en la carpeta "src/app".
{{title}}
Es una expresión que Angular sustituirá por un dato que se declara en el
archivo .ts del componente. De momento lo dejamos ahí.
Ejecutar el proyecto
Para comprobar si tus cambios en el HTML del componente han tenido
efecto puedes probar el proyecto. La ejecución de esta aplicación ya la vimos
en el artículo de Angular CLI, por lo que no necesitarás mayores
explicaciones. De todos modos, como resumen, sigue los pasos:
ng serve
Luego nos dirigimos a la URL que nos indican como resultado de la
ejecución del comando, que será algo como:
http://localhost:4200/
Entonces deberías ver la página funcionando en tu navegador, con el HTML
editado tal como lo has dejado en el archivo .html del componente principal.
En futuros artículos profundizaremos sobre muchos de los puntos relatados
aquí. De momento creemos que esta introducción al código debe aclararte
muchas cosas, o plantearte muchas otras dudas.
Entendiendo el código del componente
El código de este componente está generado de antemano en la carpeta
"src/app". Allí encontrarás varios ficheros que forman el componente
completo, separados por el tipo de código que colocarás en ellos.
{{title}}
Eso es una expresión. Angular lo sustiruirá por el contenido de una variable
"title" antes de mostrarlo al cliente. Esa variable se define en la declaración
del componente.
@Component({
moduleId: module.id,
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
Una de ellas es el "selector" de este componente, o el nombre de la etiqueta
que se usará cuando se desee representar. Mediante la propiedad
"templateUrl" asociamos un archivo .html que se usará como vista del
componente. Por último se define su estilo mediante la propiedad
"styleUrls", indicando a un array de todas las hojas de estilo que deseemos.
En la clase del componente, que se debe colocar con un export para que se
conozca fuera de este módulo, es la parte que representa el controlador en
una arquitectura MVC. En ella colocaremos todas las propiedades y métodos
que se deseen usar desde la vista.
<h1>
{{title}}
</h1>
<p [hidden]="!visible">
Adiós
</p>
<button (click)="decirAdios()">Decir adiós</button>
En este HTML hemos incluido más cosas de las que puedes usar desde
Angular. Habíamos mencionado la expresión, entre llaves dobles, que
permite volcar el contenido de propiedades del componente. También
encuentras el uso de una propiedad de un elemento, como es "hidden", entre
corchetes (nuevo en Angular ). Además de la declaración de un evento
"click" que se coloca entre parénteis.