"Si dije cercano o dije lejano" jajaja
Inicio del curso
De qué tratará este curso sobre Angular 4
Introducción a Angular 4
Versionamiento en Angular
¿Qué es Angular? Versiones y ventajas
Typescript: qué es
Introducción al Proyecto: PlatziSquare!
Setup del Ambiente de Trabajo
Herramientas de trabajo y Angular CLI
Generación y estructura de Angular 4
RETO: Haz un cambio simple en el proyecto.
Conceptos Básicos
Para qué nos sirven los Módulos y Componentes
Tipos de Data Binding y String Interpolation
Property Binding
Event Binding
Two Way Data Binding
Directivas en Angular 4 y ngFor
Directiva ngIf
Instalando librerías con NPM (Google Maps)
Directivas
Directivas ngStyle y ngClass
Directiva ngSwitch
Directiva de atributo
Host Listeners
Host Binders
Angular UI
Angular Material y Bootstrap
Configurando e implementando Bootstrap en nuestro proyecto
Ruteo
Qué hace el router en Angular 4
Implementación de Rutas en el Proyecto
Diferencias entre href y routerLink
Resaltando el link activo con CSS para indicar visualmente en que componente nos encontramos
Parámetros en Rutas
Parámetros tipo Query
Creando una vista de detalle para el proyecto
Creando la página de contacto para PlatziSquare
Servicios
Qué son los servicios en Angular 4
Creando nuestro propio servicio
Configurando Firebase en nuestro proyecto
Guardando Records en Firebase
Obteniendo records desde Firebase
Obteniendo coordenadas usando Geocoding
Reto: Crear una vista para editar records
Mostrando marcadores en el Mapa de Google
Conexión Remota (Http y Sockets)
Funcionamiento de los llamados Http y Sockets
Qué es una arquitectura cliente - servidor
Enviando llamados tipo POST
Enviando llamados tipo GET
Formateando respuestas del servidor con el operador map()
Manejando errores HTTP
Pipes
Utilidad de los Pipes en Angular 4
Usando los pipes por defecto de Angular
Parámetros en pipes
Creando nuestro propio pipe
Animaciones en Angular
Configurando animaciones en nuestro proyecto
Transiciones
Callbacks
Solución al Reto: Añadiendo animaciones a nuestra aplicación
Testing en Angular
Introducción a unit tests
Configuración de testing por default
Corriendo los tests
Creando unit tests para componentes
Integración de Unit Test con Servicios
Autenticación y Protección de Rutas
Cómo funcionan los JSON Web Tokens
Preparación de vistas para login y registro
Registrando usuarios
Loggeando usuarios
Protección de Rutas
Autenticación con redes sociales.
Logout
RxJS
Qué es RxJS
Configurando RxJS en nuestro proyecto
Uso de los Observables
Implementando un TypeAhead
Implementando un TypeAhead 2
Solución al reto autocompletar los campos de dirección usando observables
Publicando nuestro proyecto
Publicando en Firebase Hosting
Fin del curso
Conclusión ¿Qué aprendimos en el curso?
Reto final del curso - realiza un nuevo modulo de PlatziSquare de acuerdo con las historias de usuario
Sesiones en vivo
Creando un traser bullet de PlatziSquare
Sesión de preguntas y respuestas
Release de Angular 5
Sesión de preguntas y respuestas
Angular Universal
Contenido Bonus
Actualización de angular, versión 6.0
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 13
Preguntas 2
"Si dije cercano o dije lejano" jajaja
Most Epic Moment!!!
Genial, hasta ahora para estos casos yo usaba una funcion que definia en el componente y hacia el switch a nivel de Js
Por ejemplo
{{getCargo(personal.cargo)}}
Y en el componente
getCargo(cargo){
switch(cargo){
case...
}
return ...
}
Esto en AngularJS me traía problemas porque se ejecutaba constantemente volviendo pesada la aplicación.
En angular 4 que es con el que actualmente trabajo no he revisado el caso.
Pero acabo de aprender esta nueva directiva.
buenas clases
Se cae cuando agrego el span con las directivas y aún no entiendo que estoy haciendo mal…lo he revisado muchas veces
Por acá dejo mi código:
html
<div class="textcenter">
<h3>{{ title }} app is running!</h3>
Tu nombre es {{ name }} {{ lastName }} <br />
<input
type="text"
placeholder="Nombre"
(keyup)="check()"
[(ngModel)]="name"
/>
<input
type="text"
placeholder="Apellido"
(keyup)="check()"
[(ngModel)]="lastName"
/>
<button [disabled]="notReady" (click)="hello()">Hi</button>
</div>
<br />
<span class="textmarginleft">{{ coordinates }}</span>
<br />
<div class="inline" id="map"></div>
<div class="inline" id="list">
<ul>
<ng-container *ngFor="let place of places; let i = index">
<li *ngIf="place.active" [ngClass]="{ evennumber: (i + 1) % 2 === 0 }">
{{ place.name }}
</li>
</ng-container>
</ul>
<ul>
<ng-container *ngFor="let place of places; let i = index">
<li
[ngStyle]="{ 'text-decoration': place.active ? '' : 'line-through' }"
[ngSwitch]="place.closeness"
>
{{ place.name }} -
<span *ngSwitchCase="1" [ngStyle]="{ 'color': place.color }">Cercano</span>
<span *ngSwitchCase="2" [ngStyle]="{ 'color': place.color }">Intermedio</span>
<span *ngSwitchCase="3" [ngStyle]="{ 'color': place.color }">Lejano</span>
</li>
</ng-container>
</ul>
</div>
ts
import { Component, OnInit } from '@angular/core';
import { environment } from 'src/environments/environment';
import * as mapboxgl from "mapbox-gl";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.sass']
})
export class AppComponent implements OnInit {
title: string = 'Angular';
name: string = '';
lastName: string = '';
notReady: boolean = true;
map: mapboxgl.Map;
coordinates: any;
places: any = [
{ color: '#00ff00', closeness: 1, distance: 3, active: true, name: "Florería la Gardenia" },
{ color: '#360000', closeness: 3, distance: 50, active: true, name: "Donas Vida Dulce" },
{ color: '#00ff00', closeness: 1, distance: 8, active: true, name: "Veterinaria Huellitas" },
{ color: '#360000', closeness: 3, distance: 30, active: true, name: "Sushi Roll" },
{ color: '#baf73c', closeness: 2, distance: 10, active: false, name: "Hotel la Gracia" },
{ color: '#baf73c', closeness: 2, distance: 20, active: false, name: "Zapatería Clavo" },
];
ngOnInit():void {
mapboxgl.accessToken = environment.mapboxKey;
this.map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [-74.0700526, 4.6489681],
zoom: 10
});
this.createMarker(-74.0700526, 4.6489681)
}
createMarker(lng: number, lat: number): void {
const marker = new mapboxgl.Marker({
draggable: true
})
.setLngLat([lng, lat])
.addTo(this.map)
marker.on('drag', () => {
this.coordinates = marker.getLngLat()
})
}
check():void {
if (this.name === '' || this.lastName === '') {
this.notReady = true;
} else {
this.notReady = false;
}
}
hello():void {
alert(`Welcome to this App ${this.name} ${this.lastName}`);
}
}
sass
#map
margin-left: 100px
width: 650px
height: 450px
background-color: #006060
#list
margin-left: 10px
vertical-align: top
.textcenter
text-align: center
.inline
display: inline-block
.textmarginleft
margin-left: 100px
.evennumber
background-color: #4c6f7b
Como hace para escribir cercania en varios renglones a la vez?
Muy cercano: green
cercano: yellow
lejano:red
<!-- lista de lugares completa -->
<ul>
<ng-container *ngFor="let place of Places; let i =index" [ngSwitch]='place.cercania'>
<!-- <li [ngStyle]="{'color': (place.stateActive) ?'blue' :'red'}" [ngClass]="{'numero_par': (i%2==0)}"> -->
<li [ngStyle]="{'color': 'black'}" [ngClass]="{'numero_par': (i%2==0)}">
{{place.nombre}} -
<span *ngSwitchCase="1" [ngStyle]="{'background-color': 'green'}">Muy cerca</span>
<span *ngSwitchCase="2" [ngStyle]="{'background-color': 'yellow'}">Cerca</span>
<span *ngSwitchCase="3" [ngStyle]="{'background-color': 'red'}">Lejos</span>
</li>
</ng-container>
</ul>```
Porqué cuando trato de cambiar el background color con la directiva ngStyle no me funciona?
Mi código es
<ul>
<ng-container *ngFor="let i of listalugares">
<li *ngIf="i.pacientes<10" [ngStyle]="{background-color: (i.pacientes<10)? 'aliceblue' : 'green'}"><a href="">{{i.nombre}} </a> tiene {{i.pacientes}} pacientes</li>
</ng-container>
</ul>```
<ng-container *ngFor=“let lugar of lugares; let i = index” [ngSwitch]=“lugar.cercania”>
<li [ngStyle]="{color:(lugar.active)? ‘black’ :‘gray’}"[ngClass]="{numero_par:(i+1) %2 ==0}">
{{lugar.nombre}} -
<span *ngSwitchCase=“1” [ngStyle]="{color: ‘green’}">Muy Cercano</span>
<span *ngSwitchCase=“2” [ngStyle]="{color: ‘black’}">Cercano </span>
<span *ngSwitchCase=“3” [ngStyle]="{color: ‘red’}">Lejano</span>
</li>
</ng-container>
[NgSwitch] es una directiva de atributo pero que para su correcto funcionamiento se ha de usar con una directiva de estructura, esta directiva estructural es *ngSwitchCase=”valueOfMatching”. El [ngSwitch] recibe como valor la variable o propiedad la cual se comparará con los casos. Mientas que el valor de *ngSwitchCase es el valor del matching, los valores de este *ngSwitchCase solo pueden ser booleanos. Ejemplo:
<ul>
<ng-container *ngFor=”let persona of personas” [ngSwitch]=”persona.vivo” >
<li *ngSwitchCase=”true”>
{{persona.nombre}} - <h4 > Vive </h4>
</li>
<li *ngSwitchCase=”false”>
{{persona.nombre}} - <h4 > Muerto</h4>
</li>
</ng-container>
</ul>
<div>
<button type="button" (click) = "changeTitle( 'Nuevo nombre' )" > Click me! </button>
<br>
<hr/>
<br>
<input type="text" placeholder="Ingrese nombre" [(ngModel)] = "firstName" />
<br>
<input type="text" placeholder="Ingrese Apellido" [(ngModel)] = "lastName" />
<br>
<input type="text" placeholder="Ingrese Edad" [(ngModel)] = "age" />
<br>
<button type="button" (click) = "addPerson()" > Agregar! </button>
<br>
<span> {{message}} </span>
<br>
<div> Lista de activos </div>
<ul>
<ng-container *ngFor="let person of persons">
<li *ngIf="person.active && person.age > 17">
{{person.firstName}} - {{person.lastName}} - {{person.age}}
<span (click) = "deletePerson(person.id)" > x </span>
</li>
</ng-container>
</ul>
<div> Lista de personas </div>
<ul>
<ng-container *ngFor="let person of persons; let i = index">
<li
[ngStyle] = "{ color: (person.active) ? 'black' : 'grey' }"
[ngClass] = "{ impar:(i+1) % 2 !== 0, par:(i+1) % 2 === 0 }"
[ngSwitch] = "person.active">
{{person.firstName}} - {{person.lastName}} - {{person.age}}
<span *ngSwitchCase = "true" [ngStyle] = "{color:'green'}"> Activo</span>
<span *ngSwitchCase = "false" [ngStyle] = "{color:'red'}"> Borrado </span>
<span *ngIf = "person.active" (click) = "deletePerson(person.id)" > x </span>
</li>
</ng-container>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'berckmanCurso';
firstName:string = "";
lastName:string = "";
age:numbre = 0;
message:string = "";
count = 1;
persons:Array<Object> = [
{id: 1, firstName: "Newman" , lastName: "Fajardo", active:true, age: 25 }
];
changeTitle(title){
this.title = title;
}
addPerson(){
this.count++;
this.persons.push({
id: this.count,
firstName: this.firstName ,
lastName: this.lastName,
age: this.age,
active:true
});
this.message = "Persona guardada";
setTimeout( () => { this.message = ""; } , 2000 );
}
deletePerson(id){
this.persons = this.persons.map( person => {
if (person.id == id) {
person.active = false;
}
return person;
});
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?