Introducci贸n a Angular y Fundamentos

1

Creando tu primer proyecto en Angular

2

Implementando estilos

3

Mostrando elementos

4

Property Binding en Angular

5

Event Binding: click y doble click

6

Event binding: keydown

7

Modelo de reactividad con Signals

8

Creando un Signal en Angular

Estructuras de control en Angular

9

Directivas de control

10

Uso de ngFor

11

ngFor para objetos

12

Update Tasks

13

Uso de ngIf

14

Uso de ngSwitch y ngSwitchDefault

15

Controlando un input

16

Manejo de formularios en Angular

Alistando tu aplicaci贸n para producci贸n

17

Estilos al modo Angular

18

Clases en Angular

19

Editing mode

20

Estados compuestos con computed

21

Usando effect para localStorage

22

Uso de ngbuild

23

Despliegue con Firebase Hosting

24

Nueva sintaxis en Angular

25

Directivas @For, @switch

26

Migrando a la nueva sintaxis de Angular v17

Componentes Reutilizables y Comunicaci贸n

27

Construyendo un e-commerce en Angular

28

Componentes en Angular

29

Mostrando los componentes

30

Angular DevTools

31

Uso de Inputs en Angular

32

Uso de Outputs en Angular

33

Componentes para Producto

Ciclo de vida de los componentes

34

Ciclo de vida de componentes

35

Ciclo de vida de componentes: ngOnChanges

36

Ciclo de vida de componentes: ngOnInit

37

Detectando cambios en los inputs

38

Evitando memory leaks con ngDestroy

39

Audio player con ngAfterViewInit

40

Creando la p谩gina "about us" o "con贸cenos"

Mejorando la interfaz del producto

41

Creando componente de productos

42

Creando el Header

43

Creando el carrito de compras

44

Comunicaci贸n padre e hijo

45

Calculando el total con ngOnChanges

46

El problema del prop drilling

47

Reactividad con signals en servicios

48

Entendiendo la inyecci贸n de dependencias

Integraci贸n y Datos

49

Obteniendo datos una REST API

50

Importaciones cortas en Typescript

51

Pipes en Angular

52

Construyendo tu propio pipe

53

Utilizando librer铆as de JavaScript en Angular

54

Conociendo las directivas

55

Deployando un proyecto en Vercel

Enrutamiento y Navegaci贸n

56

Ruta 404

57

Uso del RouterLink

58

Vistas anidadas

59

Uso del RouterLinkActive

60

Detalle de cada producto

61

Obteniendo datos del producto

62

Galer铆a de imagenes

63

Detalle de la galer铆a

Perfeccionando tu e-commerce

64

Mostrando categorias desde la API

65

Url Params

66

LazyLoading y Code Splitting

67

Aplicando LazyLoading

68

Prefetching

69

Usando la nueva sintaxis de Angular 17

70

Lanzando tu aplicaci贸n a producci贸n

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Uso de ngFor

10/70
Recursos

Aportes 16

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Para que el input quede vac铆o al momento de agregar una tarea a la lista, solamente se agrega input.value='' en el m茅todo changeHandler() '; Quedando as铆: ![](https://static.platzi.com/media/user_upload/image-cc5a207a-a137-4c72-b9f0-3a5b6036a674.jpg)

En mi caso lo hice con splice

  deleteTask(index: number): void {
    this.tasks.update((tasks) => {
      tasks.splice(index, 1);
      return tasks;
    });
  }
![](https://static.platzi.com/media/user_upload/image-01372936-fc6a-4b78-8d1f-daa1a9ac39ef.jpg)
Otra alternativa por si desean... ![](https://static.platzi.com/media/user_upload/image-75dddc97-e90d-4ba4-a6ce-32c1d6058ce3.jpg)
Personalmente prefiero usar nombres m谩s semanticos en las funciones por ejemplo: `onNewTaskInputEvent(event: Event) { ` `const inputField = event.target as HTMLInputElement; const newTask = inputField.value; this.tasks.update((tasks) => [...tasks, newTask]); ` `}`
hola, entiendo ala perfeccion el video pero me genero una duda, la cual es 驴por que filter? y funciona con la misma lojica al traer la informacion desde una base de datos? (se que no han tocado temas de bases de datos pero me genero esa duda)
Creo que hay un error conceptual al hablar de inmutabilidad ya que al final el estado del array 'Tasks' si est谩 mutando. En este caso no hay diferencia entre utilizar el .update o .set. ```js deleteTask(index: number) { this.tasks.set( this.tasks() .filter((_, position) => position != index)); } ```
changeHandler(event: Event) {聽 聽 const input = event.target as HTMLInputElement;聽 聽 const newTask = input.value;聽 聽 this.taskSignal.update((tasksAnte) => \[...tasksAnte, newTask]);聽 };
use keyup y keydown para diferenciar los eventos ```js <input class="new-todo" placeholder="Type new todo" [value]="newTodo()" autofocus (keyup)="writingNewTodo($event)" type="text" (keydown.enter)="changeHandler($event)" /> ``` \<input class="new-todo" placeholder="Type new todo" \[value]="newTodo()" autofocus (keyup)="writingNewTodo($event)" type="text" (keydown.enter)="changeHandler($event)" />

El m茅todo filter recibe una funci贸n de callback que puede tener hasta tres par谩metros:

  1. Elemento actual: Representa el elemento actual que se est谩 evaluando en el array durante la iteraci贸n.
  2. 脥ndice: Representa el 铆ndice del elemento actual en el array durante la iteraci贸n.
  3. Array original: (Opcional) Representa el array en el que se est谩 iterando.
Para este proceso de aprender angular intentar茅 hacer una parte de la funcionalidad de notion. Estoy emocionado por seguir aprendiendo![]()![](https://static.platzi.com/media/user_upload/notion.clone-ae43ec31-0bb5-471c-9446-ff5d6b16ea8a.jpg)
Para que el input quede vac铆o al momento de agregar una tarea a la lista, solamente se agrega en la 煤ltima l铆nea input.value=' en el m茅todo changeHandler() '; Quedando as铆: changeHandler = (event: Event) => { *const* input = event.target *as* HTMLInputElement; *const* newTask = input.value; *this*.tasks.update((tasks) => \[...tasks, newTask]); input.value=''; }
excelente tema y bien explicado, gracias por esta actualizaci贸n a angular 17
Tengo una duda en mi caso para el tema de agregar una nueva tarea de estas formas y ambas funcionaron: this.\_tasks().push(this.createTask(input.value)); this.\_tasks.update((task) => \[...task, this.createTask(input.value)]) La duda es hay alguna problema en este caso this.\_tasks().push(this.createTask(input.value));
Entiendo que la forma mas legible de poder agregar un nuevo valor al signal, persistiendo su valor actual, es mediante el m茅todo update. Sin embargo, este c贸digo tambi茅n cumple el mismo prop贸sito. Entonces existe alguna consideraci贸n importante de, 驴porque utilizar update en vez de set? ```js this.tasks.set([newTask,...this.tasks()]) ```this.tasks.set(\[newTask,...this.tasks()])