Sergio Hidalgo
Apasionado por la tecnología. Ninja Developer, FullStack, Adm Servidores, Profesor de Angular, Node, Phaser, Javascript. sergiohidalgocaceres@gmail.com https://www.facebook.com/groups/607163139705114/
Angular 1
AngularJS
Angular 8
Angular 7
Angular 6
Angular 5
Angular 4
Angular 2
Angular
Herramientas y entornos de desarrollo necesarios
Herramientas y entornos de desarrollo necesarios
Descargar e instalar desde:
https://code.visualstudio.com/download
Herramientas y entornos de desarrollo necesarios
Descargar e instalar desde:
https://nodejs.org/en/
(versión 10 para adelante)
Herramientas y entornos de desarrollo necesarios
Una vez instalado, verificar que funciona bien.
Para ello abrir una ventana de comandos (windows) o una ventana de terminal (mac) y ejecutar el siguiente comando.
node -vEse comando devuelve la versión instalada de NodeJS
Herramientas y entornos de desarrollo necesarios
Descargar e instalar desde:
https://git-scm.com/
Herramientas y entornos de desarrollo necesarios
Una vez instalado, verificar que funciona bien.
Para ello abrir una ventana de comandos (windows) o una ventana de terminal (mac) y ejecutar el siguiente comando.
git --versionEse comando devuelve la versión instalada de git
Desarrollaremos Angular usando:
Trabajaremos con
Angular Cli
http://cli.angular.io
// Para instalar Angular Client
npm i -g @angular/cliPara instalar Angular Cli, debemos abrir una ventana de comandos (windows) o una ventana de terminal (mac) y ejecutar el siguiente comando en cualquier carpeta.
La instalación demora unos minutos.
npm i -g @angular/cliSi ocurre algún problema de instalación en Windows, abrir la ventana de comandos en modo administrador y ejecutar el comando de instalación.
Si ocurre algún problema de instalación en MAC, abrir la ventana de terminal y ejecutar el comando de instalación con permisos de súper usuario (es posible que solicite contraseña)
sudo npm i -g @angular/cliOtra posibilidad es ejecutar el comando anterior, pero logueandose en la MAC como administrador.
ng versionPara verificar que el Angular Cli está correctamente instalado, ejecutar el siguiente comando en la ventana de comandos o en la ventana de Terminal.
Debe mostrarles un resultado similar a la siguiente imagen.
ng new <<nombre app>>
Para crear el esqueleto de una app de Angular, ejecutar el siguiente comando desde una ventana de comandos o una ventana de Terminal.
Tomar en cuenta que el comando creará una carpeta con el mismo nombre de la app (<<nombre app>>) y dentro estarán los archivos que forman el esqueleto.
Abrir la carpeta usando Visual Code.
Menú Archivo / Abrir Carpeta
Abrir la pestaña Terminal del Visual Code (es la cuarta pestaña en la parte inferior)
Si no vemos las pestaña anteriores, darle clic al icono de la parte inferior izquierda.
ng serve --o
// o la versión simplificada
ng s --o
Por defecto el Visual Code nos ubica dentro de la carpeta de la app. Si no fuese así, ubicarse dentro de la carpeta a través de la Terminal.
Ejecutar el siguiente comando para levantar el Angular en el navegador por defecto.
Se abrirá el navegador en la dirección:
http://localhost:4200
y aparecerá una página similar a la siguiente:
Esta es la estructura de archivos del esqueleto creado.
main.ts
appModule.ts
appComponent.ts
Secuencia de ejecución de una app de Angular usando Angular Cli
Casi todos los archivos que crearemos estarán ubicados dentro la carpeta src
appComponent.ts
appComponent.html
appComponent.css
Un componente está formado por 4 archivos como máximo.
Lo más común es que estén todos juntos en una misma carpeta dentro de la carpeta src/app
appComponent.spec.ts
Lógica
Página HTML
Hoja de estilos
Pruebas unitarias
appComponent.html
INDEX.HTML
El componente inicial es invocado desde el archivo index.html situado en la carpeta src
<!-- micomponenteComponent.ts -->
import { Component } from '@angular/core'Casi todos los elementos en Angular están basados en Decoradores. Un Decorador es una clase que expande (hereda) las funcionalidades a otra clase.
Para crear un Componente (vista) se usa el decorador "Component" el cual se importa desde la clase '@angular/core'
<!-- micomponenteComponent.ts -->
import { Component } from '@angular/core'
@Component({
})
export class MiComponenteComponent {}Para aplicar un decorador a un clase se usa @NombreDecorador. El constructor del decorador usa como parámetro un objeto JSON.
Los decoradores (en su mayoría) preceden a una clase.
<!-- micomponenteComponent.ts -->
import { Component } from '@angular/core'
@Component({
selector: "app-micomponente",
templateUrl: "./app-micomponente.html",
styleUrls: ["./app-micomponente.css"]
})
export class MiComponenteComponent {}Un componente típico
<!-- app.module.ts -->
...
import { MiComponenteComponent }
from './micomponenteComponent'
...
declarations: [
MiComponenteComponent
]
...
Un componente debe declararse para que "exista" dentro de Angular. La mayoría de los componentes (y otros) se declaran dentro de un módulo a través de la propiedad "declarations".
INDEX.HTML
<!-- app-micomponente.html -->
<div>
<h1> Mi componente </h1>
</div><!-- app-micomponente.css -->
h1 {
font-family: Arial;
font-size: 30px;
font-style: italic;
}<article>
<app-micomponente></app-micomponente>
</article><article>
<div>
<h1> Mi Componente </h1>
</div>
</article>Así se inserta un componente dentro de una página html.
Noten la referencia al selector (selector de etiqueta como en css)
Así se ve en el inspector de elementos del navegador
INDEX.HTML
<article>
<app-micomponente></app-micomponente>
</article><article>
<section app-micomponente></section>
</article><article>
<section class="app-micomponente"></section>
</article>Selector de etiqueta
Selector de atributo
Selector de clase
INDEX.HTML
@Component({
selector: "app-micomponente",
...
})
@Component({
selector: "[app-micomponente]",
...
})
@Component({
selector: ".app-micomponente",
...
})
Selector de etiqueta
Selector de atributo
Selector de clase
INDEX.HTML
...
export class MiComponenteComponent {
curso: string = "FullStack con Javascript"
activo: boolean = false
cambiarCurso() {
const fecha = new Date()
this.curso = `
FullStack con Javascript.
Fecha desde 1970: ${this.fecha.getTime()}
`
}
cambiarEstado() {
this.activo != this.activo
}
}- "curso" y "activo" son propiedades de la clase y tienen un tipo de datos asignado.
- "cambiarCurso" y "cambiarEstado" son métodos de la clase.
- Se acceden a las propiedades para leer o modificar su valor a través del objeto "this".
- Sin el objeto "this", Angular no buscará una propiedad sino una variable.
- Para acceder a un método, también se usa el objeto "this".
<!-- app-micomponente.html -->
<h1> {{curso}} </h1>
<button (click)="cambiarCurso()">Cambiar fecha</button>
<button [disabled]="activo" (click)="cambiarEstado()">
Cambiar estado
</button>Entradas: ejemplo "disabled"
Salidas: ejemplo "click"
No es necesario el objeto "this" para acceder a una propiedad o método.
INDEX.HTML
Button
[ ]
( )
[disabled ]
(click)
Entrada
Input
Salida
Output
Las entradas envían un valor hacia adentro del componente
Las salidas reciben un valor y/o una señal desde dentro del componente
const nombreTarea: string = "Maquetar el nuevo front"
const duracion: number = 5
const template: string = `
La tarea ${nombreTarea}
se hará en ${duracion}
`Las plantillas de texto son parte del ES6. Nos ayudan mucho a la hora de concatenar valores de tipo cadena con valores de otros tipos de datos.
Las plantillas de texto se definen con el backstick (`) al inicio y al final. Para concatenar (interpolar) se usa la siguiente sintaxis: ${}
const lista: Array<string> = ["Persona1", "Persona2", "Persona3"]
for(let ind=0; ind < lista.length; ind++) {
console.log(lista[ind])
}
lista.forEach(function(item){
console.log(item)
})
lista.forEach( item => {
console.log(item)
})
lista.forEach( item => console.log(item))
for(let item in lista){
console.log(item)
}
for(let item of lista) {
console.log(item)
}
Diferentes instrucciones de bucles.
import { Component } from '@angular/core'
@Component({
selector: "app-micomponente",
templateUrl: "./app-micomponente.html",
stylesUrl: ["./app-micomponente.css"]
})
export class MiComponenteComponent {
tareas: Array<string> = ["Tarea 1", "Tarea 2", "Tarea 3"]
// tareas: string[] = ["Tarea 1", "Tarea 2", "Tarea 3"]
}Los datos de tipo arreglo, en typescript, se pueden definir de 2 formas:
- Array<tipoDeDato>
- tipoDeDato[]
*ngFor="let tarea of tareas"La directiva estructural *ngFor nos sirve para recorrer una colección (ejemplo: un arreglo)
<!-- app-micomponente.html -->
<div *ngFor="let tarea of tareas">
<h1> {{tarea}} </h1>
</div>La etiqueta "div" se repetirá tantas veces hayan elementos en el arreglo "tareas".
En cada bucle, un elemento del arreglo es asignado la variable "tarea" y ésta es mostrada a través de una interpolación (no confundir con la interpolación vista anteriormente).
La interpolación se hace con la sintaxis {{ }} y solo se usa para mostrar contenido dentro de una etiqueta.
<!-- miModulo.module.ts -->
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
@NgModule({
declarations: [],
imports: [
BrowserModule
],
providers: [],
bootstrap:[],
entryComponents: []
})
export class miModulo {}Estructura de un módulo
By Sergio Hidalgo
Versiones de Angular, componentes, herramientas y entorno de desarrollo, definición de eventos y propiedades.
Apasionado por la tecnología. Ninja Developer, FullStack, Adm Servidores, Profesor de Angular, Node, Phaser, Javascript. sergiohidalgocaceres@gmail.com https://www.facebook.com/groups/607163139705114/