Full transcript
0:05Hola, buenas tardes.
0:10Buenas.
0:12Bueno,
0:14e ya tengo las notas de los parciales.
0:20Se las voy a pasar por el por Telegram.
0:28A ver.
0:37La verdad, bueno, nada, felicitarlos
0:38porque en líneas generales hicieron muy
0:41buen parcial la mayoría, así que
0:45estuvieron muy bien.
0:51Ir pasando.
0:54Ahora les paso la nota y bueno, y
0:55recuerden que para en caso que quieran
0:58revisarlo lo voy a llevar el la próxima
1:03la próxima vez que vaya al instituto,
1:04creo que es en un par de semanas.
1:09Si lo quieren ver, se lo llevo.
1:12A ver, ahí les paso.
1:22Bien, ahí parcial teoría. Bien, ahí va
1:24la primera parte y a ver hasta dónde
1:26llegué.
1:45llega la segunda.
1:58Bien, ahí está.
2:00Ahí está el otro, el restito que me
2:02faltaba.
2:05Están todos.
2:14Bien.
2:17¿Qué más les quería comentar? Ah, tema
2:19de los TPs que quería eh A ver, ¿dónde
2:22está
2:27acá?
2:31tenía una duda con,
2:34bueno, hay algunos grupos que no que no
2:36lo entregaron
2:39que no entregaron el documento de APIs,
2:41así que es en el grupo cinco,
2:45grupo 8o,
2:48después hubo el grupo siete y el grupo
2:50nueve, que uno entraron dos veces y el
2:52grupo nueve, chicos, entraron tres veces
2:56Ahí
2:58ustedes
3:02grupo
3:05uno pero tres veces
3:11les pasó ahí, pero bueno,
3:13se te está acordando el micrófono, se te
3:15escucha mal, pero asumo que dijiste que
3:17entreguemos uno por grupo. Okay. Para la
3:19próxima grup.
3:19Claro. Sí, sí, sí. uno por grupo. El
3:21mismo documento no tiene no tiene ningún
3:24sentido que [resoplido]
3:25no para
3:26tres veces
3:27para tener la entrega entregada, pero
3:30bueno, nada,
3:31puede fallar.
3:32No, no, no. Yo con con que lo entren una
3:34vez se los dije un par de veces ya
3:36alcanza. Para las próximas entregas que
3:39vaya va a ser el la entrega final, eh,
3:42uno por grupo nada más. Dale,
3:44no hace falta. Yo eso lo corrijo por
3:46grupo y, o sea, veo la entrega por grupo
3:49y no de manera individual. Sí.
3:52Eh, después, bueno, tengo en el grupo 12
3:54a Gonzalo Vargas, eh, no está solo en el
3:57grupo 12, no sé si se unió a algún grupo
3:59y acá en el en el documento no se
4:01actualizó.
4:03No sé si está acá Gonzalo. A ver,
4:11eh, que tampoco entregó nada, así que no
4:13sé si
4:19eh el parcial lo hizo.
4:22No lo veo. Salo.
4:28No, no lo había conectado.
4:32No sé si está con algún grupo.
4:41Voy a escribir por Telegram.
4:47Gonzalo Vargas acá.
4:57Y bueno, como les decía, el grupo 5 y
5:00grupo 8. eh que no entregaron, no
5:04entregaron nada, por lo menos no tenía
5:06nada ni en el mail ni en el aula
5:09virtual.
5:12Acá se los puse igual en el documento.
5:13Castañeda,
5:18calves,
5:20Belastiki,
5:22son del grupo 5.
5:27Velas, veo que Luz
5:30hizo el parcial. ¿Quién
5:35más? Bueno, Gonc. Gonzálvez está
5:37ausente.
5:40Em,
5:43¿quién más? Castañeda también veo que
5:46hizo el parcial
5:49Julio.
5:54Recuerden chicos, que es obligatorio.
5:55Sigue el TP y las entregas.
5:59¿Quién
6:01más está en ese grupo?
6:08Mira, Elías, Elías, te veo. Ah, no, sí
6:11te veo acá conectado, pero vos no diste
6:12el parcial,
6:14¿eh? Ni tampoco me avisaste ni nada.
6:17Sí, profe, yo hice el parcial.
6:18No, no. Elías
6:23que lo acaba de nombrar del grupo CCO
6:25también.
6:27¿Estás
6:29ahí, Elías?
6:39¿Quién
6:59más estaba en este grupo?
7:25Bien, ¿qué más? y el grupo ocho.
7:27Santiago Cuba, Mauricio Santillán,
7:30Alexander Meléndez, Gastón Ríos.
7:34Eh, tampoco tengo entrega.
7:46Ríos Gastón hizo el parcial,
7:51así calculo que estará sigue cruzando.
7:53¿Quién más? Bueno, Meléndez, no. No lo
7:55hizo.
7:58Santillo Mauricio tampoco.
8:01Agustina Gómez.
8:03Sí, Agustina Gómez también. Eh, perdón,
8:07ese es otro grupo. Era Santiago Cuba.
8:13Cuba Santiago, ¿no? [resoplido] Bien.
8:15Eh,
8:16nada, ahí Gastón Ríos, no sé si está
8:18conectado, pero tengan en cuenta que si
8:21el grupo, la mayoría del grupo se
8:23disolvió, tienen que sumarse a otro
8:25grupo. Sí, va para
8:29los chicos de estos dos grupos, eh,
8:33si no entregan el TP, no van a probar la
8:35materia.
8:38Eso creo que lo comentamos la primer
8:41clase o la segunda,
8:43pero es una con las condiciones de
8:44aprobación, ¿sí?
8:46Así que
8:48nada, pónganse las pilas ahora porque si
8:50no no van a llegar al ya al final del
8:53cuatrimestre,
8:55por más que me digan que no estaban los
8:57integrantes, que se disoló el grupo,
9:00no van a tener excusas, o sea, el
9:02momento de plantearlo es ahora,
9:06de cambiarse, de sumarse a otro grupo o
9:08de armar un grupo nuevo,
9:11pero un poco para la entrega de este
9:13documento es para esto y para A ver cómo
9:17se comunican los grupos,
9:19eh quiénes no entregaron,
9:23quiénes abandonan la materia. Bueno, son
9:25cosas que que van pueden pasar y pasan
9:28eh en una materia en un cuatrimestre.
9:32Así que nada, quería repasar un poco
9:34este tema. El resto está perfecto. Los
9:36demás grupos cumplieron, entregaron
9:38todo, así que muy bien.
9:41Pero pero bueno, nada, esto un poco de
9:43reorganizar aquellos chicos que se van
9:46se va checando el grupo, se van quedando
9:47sin grupo.
9:50Eh,
9:52nada, ténganlo en cuenta. Y también me
9:53basé mucho en ver quién rindió el
9:55parcial. Así porque si rendieron el
9:57parcial y no entregaron el TPE
10:01parece raro.
10:11A ver si se unió Gonzalo. ¿Estás acá,
10:13Gonzalo? No lo veo. Contestó por
10:15Telegram, pero no lo veo acá, Gonzalo.
10:24Bien.
10:30Bueno, después alguna duda, ¿algún
10:32comentario del parcial? ¿Qué les
10:33pareció? Si difícil, fácil,
10:37algo que quieran comentar
10:41para m
10:42Sí, go. No, perdón,
10:44quieras. Yo no
10:46nada. A mí me pareció bien, eh,
10:50me pareció bien, sí. Eh, yo sentí que
10:52era parcial más de Apis y
10:56otro tema más y capaz HTML TSP JWT lo
11:01pasamos así por de largo, pero eh para
11:05mí estuvo bien.
11:08Eh, sí, sí estuvo enfocado más que nada
11:10en los temas más prioritarios, más
11:12principales, aparte que eran pocas
11:15preguntas, eh, entonces no abarcó todo,
11:18sino que sí abarcó de Tycript, creo que
11:20abarcó algo, Superset o alguna de esas
11:22cositas entraron.
11:24Sí, tendría que verlo otra vez, eh, qué
11:26porcentaje era de cada tema.
11:28Eh, pero sí, sí, sí, sí, pero o sea, yo
11:33lo que lo que vio
11:36lo recuerdo la semana pasada, la verdad,
11:37si te digo ahora te miento,
11:39pero
11:42en serio necesitaría ver las preguntas
11:43porque había cosas que yo leí, por
11:46ejemplo, con el apunte que vos tenías en
11:48el en el en el campus,
11:53eh, y capaz no me no entraba en la clase
11:58en la en el parcial, ¿viste? Eh,
12:02claro, no, por eso, porque en campus
12:03está todo. Por eso yo les decía que
12:04vayan tomando nota, que se queden con
12:06los temas principales, porque lo que
12:08está subido en el campus es, o sea, el
12:10total y normalmente no se llega a dar
12:12todo, pero no no dan los tiempos para
12:15dar todo el total de la teoría, sino que
12:17nos quedamos con los temas más
12:18importantes. Por eso yo le digo siempre
12:20que presten atención a la clase y ahí
12:22tomen y tomen nota de los principal que
12:25inclusive también está en los en los
12:27PPTs.
12:29Em,
12:31eso sí.
12:33Bien, ¿qué dice? Estuvo bueno porque no
12:36eran tanto definiciones sino más
12:39utilidad. Sí, sí. Algunas preguntas
12:40serán también un poco para entender y
12:42para captar los conceptos, así que no no
12:46fui tan al a la definición en sí, sino
12:50para que se se razone un poco más y
12:54quería ver si se habían entendido más
12:56que nada eh los conceptos y la manera de
13:00aplicarlos.
13:03Así que bien, bien. No sé qué más quería
13:05comentar, Kevin.
13:06Eh, yo sí, eso me gustó, que si lo
13:10razonabas te salía, porque capaz que el
13:11concepto lo podías tener no tan claro o
13:14no tener la definición al pie de la
13:17letra, pero me gustó eso, que apuntes al
13:20concepto más que al
13:22Bien. Sí, sí.
13:23Las definiciones per sé, que lo que vas
13:25a ver el día de mañana va a ser todo el
13:26concepto. Si no lo entendiste, no lo vas
13:28a
13:29Claro. Exactamente. Sí, sí. Tal cual.
13:32Eso es que fue cortito dentro de todo,
13:33porque en 20 minutos, media hora, lo
13:35podías resolver.
13:36Sí, sí, sí. La verdad que lo la mayoría
13:39lo lo terminó bastante rápido.
13:42Bien, ¿alguien más?
14:05Bien,
14:07bueno, e nada, recuerden que hay una
14:13una segunda etapa que es de
14:14recuperatorio.
14:16Aquellos que sacaron menos de siete y
14:17quieran recuperar. A plazos no hubo
14:19ninguno,
14:21así que en ese caso nadie está obligado
14:24a hacer el recuperatorio. Pero bueno,
14:26algunos que sacaron menos de siete y y
14:29quieran ver de promocionar lo pueden
14:31hacer.
14:33Lo único que tengan en cuenta es que la
14:35nota del recuperatorio va a pisar a la
14:38del parcial. Sí. O sea, que si en el par
14:39sacan un seis, si en el recuperator
14:41sacan un tres, bueno, ahí ya no tienen
14:43chances y van a tener que recursar, ¿sí?
14:45Porque está aplazado.
14:49Sí o sí. Tienen que tener eh los dos
14:51parciales aprobados y el TP más el TP y
14:54bueno, más las entregas, pero mínimo
14:56para aprobar la materia tienen que tener
14:59los parciales y el TP aprobado.
15:04Así que bueno, tengan eso en cuenta.
15:07Em, vamos a ver. Ver cuandondo es el
15:10parcial de práctica.
15:15Es un teórico. Bien. Y el [resoplido] de
15:17práctica es el 27, un poquito menos de
15:19un mes.
15:21Así que
15:23en un mes e va a ser el otro parcial.
15:39Sí, Elenora.
15:41Sí, el segundo parcial es solamente
15:43práctica.
15:44Sí, sí, exactamente.
15:45Nada de teoría.
15:47No, no, no. Todo exclusivamente
15:48práctico.
15:50Gracias.
15:51No, nada.
15:54Bien, Elías. Bueno, eh, no, normalmente
15:58lo las faltas para los parciales tienen
16:00que estar justificadas, así que después
16:01si querés escribir en privado por
16:03Telegram y y lo vemos. E por eso lo
16:06avisé antes del parcial y aquellos que
16:08no podían asistir tenían que que
16:11avisarme por lo menos.
16:14Así que pues lo vemos
16:18bien.
16:20Bueno, hoy ya vamos a empezar con lo que
16:22es eh
16:25una una práctica, así que nos va a
16:26llevar dos clases,
16:29va a ser un una aplicación de listas.
16:35E bien, igual antes eh quería
16:40volver al TP a ver cuánto nos queda hoy.
16:43Es 29
16:49acá.
16:57¿Dónde está la fecha de entrega?
17:01El 10 de noviembre.
17:08Bien, a partir ya de la próxima clase eh
17:11la idea es que vaya mostrando
17:14los avances que tienen en el desarrollo
17:16del TP, ¿sí? En lo que es el código.
17:19Así que ahí voy a ir a ir llamando por
17:21grupo. No sé si las la en una clase van
17:25a mostrar todos, pero en dos clases sí.
17:28La idea es que todos vayan mostrando sus
17:30avances.
17:32Sí, la va un poco la idea es de que
17:34todas las clases que nos quedan hasta el
17:36hasta la entrega es que todos los grupos
17:38los grupos vayan mostrando sus avances
17:41en lo que es el desarrollo.
17:44Así que ténganlo en cuenta.
17:46Sí, para ya a partir de la próxima clase
17:49voy llamando a la mitad de los grupos.
17:51Vamos a hacer mitad y mitad cada una de
17:53las clases
17:54para
17:56para ver cómo van con los avances.
18:08Para inicio de sesión usamos W. Sí. O
18:10sea, tiene que usar W para las rutas
18:12protegidas.
18:14Sí. Sí. El inicio de sesión no usa W.
18:17¿Por qué? Porque el inicio de sesión
18:18tiene que acceder todos.
18:21El login login tiene que acceder todo el
18:23mundo.
18:25Entonces ahí en ese caso no es necesario
18:27un W, sino para las rutas, como vimos la
18:30clase pasada, eh, que están protegidas,
18:34eso sí.
18:52Bien,
18:57así que bueno, nada, ya pueden igual eh
18:59pueden ir empezando si ya con lo que es
19:02el desarrollo, ya fuimos viendo
19:04bastantes cosas como para que puedan ir
19:06empezando con el desarrollo del del TP,
19:09ir
19:12desarrollando lo básico.
19:15Si ya tien ya saben cómo conectar las
19:17APIs,
19:19cómo ir creando los los el proyecto, así
19:23que
19:25vayan avanzando con eso en definir las
19:27cantidades de pantallas, [carraspeo]
19:29definir el
19:31eh lo que es la parte gráfica del
19:33frontend. Sí,
19:37todo eso ya lo si bien
19:40e quizás no van a avanzar con todas las
19:42pantallas en el desarrollo en una
19:44semana, pero sí teniendo la idea del del
19:48diseño, por lo menos el el login,
19:52eh, ¿qué más? el registrarse, todo eso
19:54lo pueden ir, ya lo deberían ir
19:56avanzando.
20:05Bien,
20:08¿qué más tenemos?
20:10A ver, estoy leyendo el documento, a ver
20:12si hay algo más. Bueno, recuerden que
20:15como dice acá el documento, ahí se los
20:17voy a compartir para que los veamos, así
20:19repasamos ya que estamos. Esto trabajo
20:22final.
20:30Bueno, la estructura según como lo vimos
20:32en clase, que es la estructura del
20:34proyecto, cómo vamos guardando carpeta,
20:38¿sí?
20:40Lo que son los servicios,
20:42los W, por ejemplo.
20:45Eh, después, bueno, cada cada componente
20:48tiene su carpetita.
20:50¿Qué más tenemos?
20:52Bueno, vamos a trabajar con modules, no
20:54con standalon. Recuerden que Standalon
20:56va a estar en false, así que el proyecto
21:00lo tenemos que crear siempre con NG
21:02Modules.
21:06¿Qué más teníamos?
21:09El, perdón, el tipo de si es de card, si
21:11es lo que quiera, lo definimos nosotros,
21:13¿no?
21:14Sí, si eso lo definen ustedes.
21:16Este es el tipo de proyecto,
21:19pero proyecto con módulos.
21:21¿Qué más deberate momento de tener
21:23comentada la funcionalidad? Ah, esto no
21:25sé si lo me parece que no lo vimos
21:27todavía. Hoy lo vamos a ver. Lo de los
21:28comentarios, el formato de comentarios,
21:31eso no se los mostré, es algo muy
21:32sencillo.
21:34Todos los métodos o funciones que
21:37ustedes que ustedes creen tienen que
21:39tener el comentario
21:41eh correspondiente con el formato que
21:44vamos a ver hoy y todo lo que ustedes
21:47desarrollen. Sí.
21:51Bueno, la API, la API pública, eso ya lo
21:54vimos, la funcionalidad nativa,
21:59eh, en todo caso, persistir, van a
22:01persistir en Firebase si quieren usarlo
22:03como base de datos que se usa en la
22:05nube,
22:07son para guardar datos de de los
22:09respecto a los usuarios, como no se
22:11puede ser un favorito, un historial de
22:14lo que sea, de consulta.
22:19Así que bueno, esto vayan [carraspeo]
22:21repasándolo.
22:24¿Qué más teníamos? A ver.
22:51Bien. Ah, el login, el login lo ideal
22:54sería que usen cognito de AWS.
22:59Sí, es es gratuito.
23:03Quizás les pide algún dato de de algún
23:06medio de pago, pero no les cobra nada.
23:08Eso ya ha pasado, no no les cobra nada,
23:11es gratuito.
23:13Sí, solo tienen que registrarse, crearse
23:15la cuenta y usarlo para el registro de
23:18usuarios. [carraspeo]
23:19Si, eso es para para hacer el login. Así
23:22que vayan vayan investigándolo. No
23:24recuerdo si se los había nombrado, pero
23:27pero bueno, la herramienta se llama
23:29cognito de AWS.
23:32Eso es para que hagan el el login de
23:35usuario. Sí. Y después, bueno,
23:39para persistir, como dije, Firebase y la
23:41API pública es la que ustedes van a
23:43utilizar que ya enviaron el documento.
23:47Así que nada, más que nada era
23:49mostrarles esto, repasar este documento
23:51con el código TScript y Ionic, que es lo
23:54que vimos venimos viendo. Eso
23:58creo que está bastante bastante claro.
24:01Bueno, nada más.
24:04Bien, hoy entonces vamos a hacer vamos a
24:07empezar con la práctica,
24:09así que nos va a llevar dos clases.
24:13Vamos a repasar de nuevo el cronograma
24:15por si quedan algunas dudas.
24:20Estamos en la clase del 29.
24:24Bien, creación de listas. La clase que
24:27viene vamos a finalizar con el proyecto
24:29de listas.
24:32Después vamos a hacer el siguiente
24:34martes un ejercicio integrador.
24:37Sí,
24:39para que sigamos repasando.
24:41¿Qué más? Y tenemos la clase siguiente
24:44que es el martes 20,
24:46repaso de práctica.
24:48Acá, como les como les dije la otra vez,
24:50lo ideal sería que ustedes eh luego del
24:53integrador
24:55me digan qué dudas tiene, qué les
24:57gustaría repasar
24:59eh para armar una práctica en base a sus
25:03dudas. Sí, y la veríamos el martes 20,
25:07ya que sería la clase anterior al
25:09parcial. Sí, así llegan con todas las
25:13dudas despejadas
25:15y les queda una semana más para seguir
25:17practicando y sacándose dudas.
25:21Pero repito, entonces las dos próximas
25:23clases, proyecto de listas, la
25:24siguiente, el integrador complementario.
25:28Estos son ejercicios que ya están
25:29armados y la idea del 20
25:34es armar un ejercicio nuevo en base a
25:37todo lo que ustedes planteen, que les
25:38gustaría repasar y que tengan dudas.
25:44Bien.
25:47¿Algo
25:53que quieran comentar? ¿Alguna duda?
25:59Eh, la presentación es presencial
26:01también, ¿no? Sí, el TP en la defensa,
26:03digamos.
26:04Sí, sí, sí, presencial.
26:06Y va a ser el día del recuperatorio.
26:10A ver, ahí les vuelvo a decir cuándo es.
26:11Sí, creo que el 17.
26:13El 17. Así, exactamente,
26:16el 17. Ahí van a estar todos los grupos
26:20presentando,
26:24eh,
26:25y bueno, aquellos que tengan que rendir
26:28los recuperatorios rendirán primero y
26:31después presentarán,
26:33pero ese día sí es el
26:37y bueno, después la semana siguiente ya
26:39es el termina el cuatro trimestre,
26:42así que nos queda asistir dos veces más
26:45que es el 27 de octubre.
26:47Y el 17 de noviembre
26:51sería el parcial de práctica y el 17
26:54recuperatoria y presentación de los TPS.
27:05La última práctica, claro, la última
27:07práctica sería antes del parcial,
27:10el 20.
27:11Después nos queda ver
27:14algunos detalles de
27:17cómo generar el APK con con Android con
27:19Android Studio y después, bueno, una
27:21clase más para que ya presenten el el TP
27:26y bueno, la
27:29una clase de repaso para aquellos que
27:31tengan que recuperar lo que es teoría y
27:35práctica. Si esa la clase del 10,
27:37inclusive la del TR y la del 10 la
27:39podríamos usar para
27:42repaso.
27:44E
27:46esas dos clases quedarían ahí de
27:47respaldo para
27:49una la del la del tres para ir viendo
27:52los TPS, que es algunos que tengan que
27:55necesiten ayuda o
27:59o que quieran ver algo. y la del 10 ya
28:02más que nada para para entregar el TP y
28:06como les decía, repaso para la para los
28:08recuperatorios
28:10en caso que alguien necesite darlo.
28:20Bien.
28:24Bueno, si no hay más dudas vamos a
28:26empezar a hacer la práctica.
28:56A ver, compartir. A ver.
29:32Bien, ahí estamosandar
29:43esto.
29:46Bien. Bueno, vamos a empezar con la
29:47instalación.
29:52Ahí se ve bien.
29:55Sí. ¿Cuál práctica es, profe? ¿Puedo
29:57decir el nombre?
29:59Eh, práctica proyecto Ionic, clase 7.
30:03¿En qué está?
30:05Eh, siete, supongo.
30:08Poquito más grande puede ser.
30:10Sí,
30:15ahí se ve un poco mejor.
30:16Sí, gracias.
30:20Bien,
30:22vamos a posicionarlos en nuestra carpeta
30:24de proyectos.
30:39Eh, bien.
30:42Vamos ahora a realizar una instalación,
30:44¿sí? Con el comando, bueno, Ionic Start
30:47solamente vamos air Angular proyecto
30:50listas.
30:51Eh, va a ser un proyecto de tabs. Sí. Y
30:54en modules
30:58entonces
31:06wizard esto creo que era que no. Bien,
31:09ponemos que no.
31:12Angular seleccionado. Proyecto
31:16listas.
31:18Está igual. Proyecto gu bajo listas.
31:21Está bien,
31:23perfecto.
31:25Eh, dijimos que iba a ser de tabs. Está
31:28perfecto. Seleccionamos tabs y en
31:31modules.
31:35Bien, tenemos tiempo que se instale.
31:44Vamos a abrir acá
31:48los iconos. Acá están todos. Perfecto.
31:53A ver, ¿qué más? Nada más. Bien. Bueno,
31:56acá se va a crear el proyecto, ¿sí? Con
31:58los tres tabs, como vimos la otra vez.
32:02La idea es de la aplicación eh es crear
32:07listas de actividades, de tareas. Sí.
32:11Inicialmente vamos a tener la lista eh
32:14tres tabs por hacer, haciendo y
32:16terminado. [carraspeo]
32:18La lista debería aparecer eh una vez que
32:21la herramienta esté finalizada en por
32:23hacer, ¿sí? Donde va a tener sus
32:26actividades sin completar.
32:31Cuando al menos una actividad se
32:32complete,
32:34la lista debería pasar al al tab
32:37haciendo y cuando todas sus actividades
32:39estén completas, la lista debería pasar
32:42al tab terminado.
32:45¿Sí? Eh, entonces esa es la idea de la
32:48aplicación.
32:58terminando. Bien, tengo una cuenta, ¿no?
33:02Perfecto. Vamos a abrir el proyecto
33:05ahora
33:10que est proyectos proyecto listos.
33:20Bien.
33:22Ab una terminal, nueva terminal.
33:34Bien, bueno, ya tenemos todo instalado.
33:38No modules
33:42PP,
33:43tenemos los tres tabs, tab 1, dos y 3 y
33:47el tab general. Si, esto lo lo que
33:49habíamos visto la otra vez. Y bueno, y
33:51el Explore Container, que es lo que se
33:53muestra inicialmente.
33:56Vamos a ponerlo para que inicie.
34:23Bien,
34:30ya inició la aplicación. Tenemos los
34:33tres tabs. Sí. Acá el contenido, como
34:36decíamos que está en el explorer
34:37container
34:38que lo habíamos visto
34:41la otra vez. Así que es esto lo que
34:43vemos acá.
34:46Bien, no lo vamos a usar ese.
34:50Bueno, vamos entonces eh a empezar.
34:54Está la aplicación como se instaló.
35:02Vamos a ver qué nos dice la práctica.
35:05Bien,
35:07esto ya lo abrimos. Vamos a empezar por
35:09cambiar el nombre de los botones. Sí,
35:12según lo que fuimos nombrando recién,
35:15que va a ser por hacer
35:17acá por hacer haciendo y terminado. Van
35:20a ser los tres posibles estados.
35:24Por eso vamos a ir al tab a tabs, ¿sí?
35:28que es el que contiene los tres botones
35:32por hacer
35:34primer botón, segundo haciendo
35:38y el último
35:41terminado
35:48por hacer haciendo y terminado. Bien, ya
35:50cambiamos el nombre.
35:52Ahora lo que nos pide es que cambiemos
35:53los iconos.
35:56Sí, acá nos da una referencia de qué
35:58iconos ponerle. Ahora primero dice que
36:01busquemos CLI CI.
36:05Ven acá si le damos un click se copia
36:08toda la línea.
36:13Ion icon. Sí, acá copiamos. ¿Ven? Lo que
36:15va a cambiar es el nombre.
36:19Le cambiamos el nombre. Y acá, ¿ven? Ya
36:22se cambió.
36:24¿Cuál era el otro? Flash y don
36:30flash
36:32el rayito.
36:38Ponemos acá el icono
36:42y el último era don.
36:50Y acá el icono tres.
36:55Bien, acá cambié el nombre y vemos que
36:58se haya aplicado el cambio.
37:00Perfecto. Por hacer haciendo y
37:03terminado. Bien,
37:06ya tenemos la primer parte.
37:10¿Qué más? Ahora dice que e cambiar el
37:13nombre de los tabs,
37:15¿sí? En el HTML de cada tab lo mismo.
37:19¿Por qué? Porque acá nos dice tab un,
37:22tab dos y tab 3. Entonces debería hacer
37:24referencia al tab. Sí, pero eso como
37:27vimos corresponde a cada uno de los tab.
37:30Sí, ya eso es el HTML en particular del
37:32tab.
37:34Entonces, por hacer
37:38título del tab, del tab 2
37:41haciendo,
37:44vamos guardando. Si ven que voy
37:46cambiando le lo guardo y este era
37:50terminado.
37:53Guardamos. Compilo bien. Y entonces,
37:55¿ven? Acá ya tenemos
37:58terminado. Perfecto.
38:01Entonces, cada uno con su nombre.
38:07Bien, acá nos dice queemos un botón
38:10flotante en el tab un, ¿sí?, que va a
38:13ser para agregar las nuevas listas.
38:17Si bien, acá tenemos el código del
38:19botón. Vamos a ver qué nos dice acá. Eh,
38:23¿qué es lo que tenemos? Acá tenemos
38:26botón flotante.
38:28Si recuerden que esta es la
38:29documentación de de Ionic Framework.
38:32Y acá tenemos diferentes botones. Ven,
38:36código.
38:40Ven, este se abre para los costados. Acá
38:43está todo el código.
38:45¿Qué más tenemos? Bueno, esto lo
38:46habíamos visto la otra vez, pero vamos a
38:48usar este que es más sencillo, que va a
38:50ser solamente para para crear
38:54e una lista, solamente apretarlo y
38:58agregar.
39:00Bien,
39:02lo dice entonces que lo agreguemos en el
39:04tab un vamos a cerrar estos
39:07y como es HTML, esto lo vamos ya lo
39:10vamos a borrar
39:13y vamos a pegar acá el botón.
39:17formato s fab f button el icono add es
39:22agregar y por ahora solamente debería
39:25aparecer
39:29bien acá está síemos
39:32el botón lo único que nos falta ahora es
39:34acomodarlo donde va a estar si ven que
39:37acá tenemos vertical horizontal
39:41y fixedit
39:43eh esto estaba
39:46button. Acá
39:49vertical es la posición vertical en la
39:51pantalla. Tenemos top y bottom. Top es
39:54arriba, botón abajo. Y en la parte
39:56horizontal tenemos start y endda
40:00derecha, izquierda es start y derecha
40:04es. Va en orden de lectura.
40:08Sí, por default, si no le ponemos nada,
40:11se posiciona en el inicio de la
40:13pantalla.
40:15y slot fixit. Esto es para el estilo.
40:19Eh, tengan cuenta que abajo está la
40:20barra. Sí, porque si no le ponemos nada,
40:25se va. Ahí le mostr, les muestro cómo
40:27queda. ¿Ven que toma todo el contenido
40:30de la pantalla? Sin tener en cuenta
40:34la barra la barra que está acá en el pie
40:37de la pantalla. Entonces,
40:40para que no se encime, tenemos que
40:42aplicarle este estilo,
40:45¿ven? Entonces, acá ya quedó el botón
40:47listo.
40:48Entonces, ¿ven que ahora lo tenemos solo
40:50en el tabo? ¿Sí?
40:55¿Por qué? Porque solo trabajamos sobre
40:58el HTML del tab.
41:01No estamos trabajando con el resto de
41:02los tabs, solo con el.
41:06Bien, esto lo vamos a borrar porque
41:08estamos
41:10trabajando con el contenido
41:15uno. Bien, por ahora el botón no hace
41:17nada.
41:20Sí, hasta ahí vamos bien. ¿Siguen alguna
41:24duda?
41:25No, no.
41:29Paso ocho.
41:31Bueno, acá les dice cuál es la opción
41:33que buscamos en el en la página de
41:36Ionic. Sí,
41:39para usarlo de IA. Bueno, acá va estar
41:41explicando. Ven, top start,
41:45la ubicación del botón.
41:49Esto ya lo hicimos bien. Nueve. Ahora
41:51nos dice que a ese botón
41:54si le agregamos la función. La función
41:56va a ser eh agregar lista
42:01mediante el evento click.
42:05Entonces si evento click
42:09función agregar lista nosotros. Entonces
42:12ahora si guardamos esto nos va a arrojar
42:15error.
42:17¿Por qué? Porque no tenemos declarada la
42:21función.
42:23Sí, ven acá nos dice el error,
42:28si la propiedad lista no existe en el
42:31tipo eh tabuno page. Se refiere a la
42:35lógica.
42:37Entonces nosotros tenemos que venir y
42:39declarar acá nuestra función.
42:44Ya por ahora la declaramos vacía.
42:51V. Y ahora ya compiló.
42:56Vamos. La aplicación está corriendo. No
42:57hace nada todavía.
43:00Vamos a ver. Vamos a poner un console.
43:02log.
43:05Vamos a hacer agregar lista. Vamos a
43:07poner acá botón
43:13agregar lista.
43:17Y con esto vamos a probar si presionando
43:19el botón está llamando a esa función.
43:22Bien, acá botón agregar lista.
43:26Sabemos que está funcional.
43:30van a aparecer toda la cantidad de veces
43:32que nosotros lo vayamos presionando.
43:37Bien,
43:41bueno, acá agregamos la función,
43:44está agregada
43:46y ahora la [carraspeo] idea es que
43:48trabajemos con alertas. Sí.
43:51Bueno, para eso tenemos que importar eh
43:55controlador de las alertas. Nos va a
43:58hacer la inyección de dependencia.
44:01Lo vamos a copiar directamente y a pegar
44:04en el constructor. Sí, donde hacemos la
44:06inyección. Aler controller. Tenemos que
44:09hacer la importación y agregar
44:11importación del aler controller
44:16para poder trabajar con esta eh con esta
44:19clase o librería.
44:22Si es nativo de Ionic, de Angular.
44:27La idea de crear una alerta es que eh
44:29nos le al usuario un un cartelito donde
44:33muestre si esa lista se agregó o si hubo
44:36algún error o etcétera para mostrarle
44:39información al usuario en la pantalla.
44:42Entonces, para eso necesitamos crear e
44:46la variable de clase.
44:50Bien, bueno, acá es un poco lo que les
44:51dije.
44:54Bien, agregamos el código
44:57si para mostrar una pantalla de diálogo.
45:00Acá está como siempre el código. Si
45:06acá tienen diferentes tipos de pantalla
45:08de diálogos.
45:12con botones,
45:16título, subtítulo,
45:23bien, vamos a crearla y ahora vamos a ir
45:26en detalle qué es lo que hace nuestra
45:28función.
45:31Vamos a sacar
45:36conso Loog.
45:38Bien, trabajamos con async. ¿Por qué?
45:41Porque el método create de Alert
45:45Controller devuelve una promesa.
45:48Entonces, cuando trabajamos con promesa,
45:51acá dice que devuelve una promesa.
45:55Siempre tenemos que trabajar con a y a
45:58una llamada asíncrona
46:00y el le dice que va a tener que esperar
46:02la respuesta
46:04de ese método.
46:06Bien, ¿qué tenemos acá?
46:09Primer e propiedad es el header,
46:13agregar lista.
46:16Este va a ser el título. Vamos a tener
46:18un input,
46:20pueden ser varios. ¿Ven? Cuando tiene un
46:22corchete,
46:24como un array,
46:26va a ser un array de objetos. En este
46:28caso, este es el objeto.
46:31¿Sí?
46:33Entonces, el primer input que hice va a
46:35ser de tipo texto.
46:37El nombre donde se va a guardar ese dato
46:40va a ser título.
46:42La forma de acceder a ese dato que se
46:43carga va a ser título. Este sería la
46:45variable.
46:48Y en placeholder que dice ingrese nombre
46:51de la lista.
46:53es el texto que va a aparecer en gris
46:55para indicar al usuario qué es lo que
46:57debe ingresar en ese cuadro de texto.
47:04Bien, entonces acá se cierra el objeto,
47:08se cierra el input
47:11y el create.
47:15Bien, después una vez que se creó esta
47:16variable,
47:18¿sí? De tipo valer controller,
47:21lo que vamos a hacer es llamar a su
47:24propiedad present. ¿Para qué? Para
47:27mostrarla la pantalla, porque nosotros
47:29acá la creamos. Creamos el objeto
47:32de esta forma que dijimos recién y se lo
47:35asignamos a esta variable, pero lo que
47:38nosotros necesitamos después es
47:39mostrarlo en la pantalla.
47:43Guardamos. Bueno, acá quedó el conso
47:45log. Lo vamos a dejar por ahora.
47:47Lo probamos apretando el botón. Bien,
47:50ven acá dice agregar lista. Ingresa el
47:52nombre de la lista. Sol, le ponemos
47:54lista uno, por ejemplo.
47:58Ven, podemos ingresarlo, pero no tenemos
48:01nada, no hace nada. Ven, acá apareció el
48:03conso log de la mundo cuando apretamos
48:06el botón
48:08y ya estamos mostrando la alerta.
48:12Sí, es para agregar una lista. Entonces,
48:14como dijimos, acá va el nombre de la
48:16lista, pero nos faltan los botones.
48:21Sí, el botón de OK para guardar ese
48:24nombre, la lista.
48:28Acá lo que les comentaba sin gaweight.
48:32Bien. Y acá entonces agregamos los
48:34botones.
48:36Así que, como dijimos recién, eh el
48:39input es un objeto
48:43que se puede agregar
48:45la cantidad que se necesiten de objetos.
48:48Acá podemos poner una coma.
48:53Vamos a darle formato.
49:02Bien. Eh, acá butons. A ver.
49:08Faltó el
49:11corchete de cierra.
49:14Bien, entonces
49:17inputs coma. ¿Ven que a cada una de las
49:20propiedades se va separando por coma
49:23cuando cierra acá el corchete de inputs,
49:26coma y ahora se agrega buttons, lo
49:29mismo, se abre corchete,
49:32un objeto y dos objetos.
49:37El primero, ¿qué va a ser? Va a tener un
49:38texto que va a ser el botón de cancelar
49:41y su rol va a ser cancelar. cancel que
49:44va a ser cierre eh ese al controller.
49:48Y el segundo objeto, el segundo botón,
49:52el texto va a ser crear. Y acá vamos a
49:55trabajar con los datos, ¿sí?
49:59¿Qué datos vamos a obtener? Y los datos
50:02del título.
50:05Vamos a guardarlo y vamos a ver cómo
50:06funciona. Este consol lo vamos a quitar
50:10para ya trabajar con el del botón crear.
50:17Entonces, ¿ven? Ahora ya están los
50:18botones. Cancelar y crear.
50:22Lista uno. Crear.
50:25¿Ven? Y acá nos mostró
50:30data que vienen data. Y bueno, van a
50:32venir los datos de los inputs que
50:35tengamos.
50:37En este caso tenemos un solo input,
50:40¿ven? es un objeto
50:43que solamente tiene un atributo y un
50:45valor. El atributo se va a llamar
50:47título. ¿Por qué? Porque nosotros
50:48indicamos que se llame título
50:52y en el nombre del input dijimos que su
50:55atributo se va a llamar título y el
50:57valor
50:59va a ser que nosotros hayamos ingresado
51:02en el input.
51:04lista dos, por ejemplo,
51:08¿ven?
51:12Lista uno y lista dos. Entonces, de esta
51:14forma vamos a poder acceder al dato.
51:19Acá nosotros ponemos punto título.
51:23Vamos a hacer una cosa.
51:33Lista uno. Crear.
51:36Ven que pusimos dos conso log.
51:39Primero con la con data,
51:42¿sí? Que dijimos que va a traer
51:45todo lo que tengan los inputs.
51:48En este caso solo había un input, ¿sí?
51:52Sol una variable que es título y luego
51:55imprimimos
51:57el valor de esa variable título
52:02que es un texto que dice lista un que es
52:05lo que se ingresó en el input.
52:08Entonces, de esta forma vamos a poder
52:10trabajar con este dato. La idea es
52:13guardar ese dato en un array
52:16que va a tener la cantidad de listas que
52:19el usuario vaya creando. ¿Sí? ¿Para qué?
52:21Para no perderla. Porque si nosotros no
52:24la guardamos en ningún lado, no vamos a
52:27poder tener un listado acá.
52:30Entonces esta forma se accede al dato
52:32del input. Sí, en el handler del botón
52:36crear.
52:38A través de data decimos que va a ser de
52:40tipo Ani porque no sabemos qué
52:41estructura va a tener.
52:43Puede tener un input, puede tener tres,
52:455, 10.
52:47Entonces va a ser de tipo ANI,
52:50va a tener cualquier forma.
52:55Bien, hasta ahí vamos bien. ¿Alguna
52:57duda?
53:07Bien.
53:10Bueno, entonces ya tenemos el botón,
53:12tenemos
53:16el alerta o el modal, si se quiere
53:18llamar de alguna forma, también se le
53:19puede llamar modal,
53:21donde vamos a tener el título, el input
53:24y los botones.
53:26El cancel ven que no hace nada,
53:28solamente va a cerrar
53:30la alerta.
53:32Sí.
53:35Bien.
53:39¿Qué más?
53:41Dice, "Agregamos una función a nivel de
53:43la clase para validar que no se ingrese
53:45texto vacío." Claro, porque nosotros si
53:47ahora le ponemos crear, ven que nos
53:50ingresa un texto vacío.
53:53Título. Ven acá también imprimió. ¿Qué
53:54imprimió? Nada. Imprimió. En vez de
53:56imprimir texto, imprimió un vacío.
53:58Entonces, ya empezamos con la validación
54:00de datos.
54:03Sí, es la cual devolverá un buliano para
54:06ver e para validar si existe ese dato y
54:10tiene un contenido. Esta es la función
54:14donde le agregamos
54:21afuera.
54:25La función se llama validar input.
54:29Va a recibir por parámetro.
54:32Sí. E se va a hacer un input, el nombre
54:36de la variable va a ser un input del
54:37parámetro y va a ser de tipo y esta
54:40función devuelve un buliano.
54:43Obligatoriamente va a tener que volver
54:44un buliano sí o sí.
54:47Entonces acá pregunta,
54:49eh, ¿tiene algo ese input?
54:53Si tiene algo, tiene una variable que se
54:55llame título y ese título tiene algo
54:58adentro.
54:59ingresa,
55:01retorna true
55:04y si no se cumple alguna de las dos
55:07va a retornar false.
55:14Bien.
55:17Y acá, bueno, en este caso por consola
55:19nos va a mostrar que debe ingresar un
55:21valor. ¿Por qué? porque va a estar
55:22vacío.
55:24Entonces, ya tenemos la función.
55:30Eh, a ver, quería ver algo.
55:45Bien.
55:58Y acá también puedes limitar si querés
56:00el length largo de de la tarea o lo
56:04corto también, ¿no?
56:05También. Sí, sí, si acá mismo si querés
56:09podes o crear otra validación, otra
56:12otra función.
56:15Sí.
56:17que valide ese largo también.
56:21Eh,
56:23bien,
56:26listo. Ahora lo creamos. Entonces, ahora
56:27lo que tenemos que hacer e
56:30es llamarla.
56:33¿A dónde la vamos a llamar? Acá.
56:36Entonces, vamos a poner validar input.
56:40Y acá ven que nos arroja error. ¿Por
56:42qué? Porque nos pide
56:44Sí.
56:46E a por es primero escondí
56:51y ahora nos pide que dice se espera un
56:55argumento y no se pasó nada. Acá le
56:58tenemos que pasar data y que es el valor
57:01que se va a analizar.
57:05Sí,
57:09guardamos.
57:12Vemos si está funcionando. Crear. Ven
57:14acá. debe ingresar un valor.
57:19Nosotros le ponemos lista uno.
57:24Si ven acá no arrojó ningún cartel,
57:27entonces quiere decir que entró en la
57:29validación.
57:31Así que input existía y tenía una
57:33variable título con algo adentro
57:38y no con un espacio.
57:41Pero no te la está creando igual.
57:44Eh, sí, ¿ves? Ahí le agregamos un
57:46espacio. Eh, no, si si no si acá no le
57:50ponemos nada, no la está creando.
57:52A ver,
57:54no lo crea.
57:58¿Por qué? Porque dice que no tiene nada
58:00dentro. En realidad sí lo crea
58:03lo crea como vacío.
58:05Directamente está vacío.
58:08Agregamos un espacio. ¿Ves? Si le
58:11agregas un espacio quiere decir que
58:12tiene algo adentro.
58:16Si tiene un if. ¿Cómo?
58:17CL. Pero digo
58:19además de la validación igual te lo crea
58:21aunque no tenga nada dentro.
58:24Sí, sí. O sea, esto lo va a crear porque
58:26porque estamos apretando el botón crear.
58:29Entonces, el botón crear
58:31eh el botón crear lo que hace es validar
58:34esto, pero el aler controller ya está
58:36creado con el input. El input se crea,
58:39sí o sí se crea. Lo que se valida es que
58:42esto tenga algo adentro,
58:45esto no sea nulo o undefined.
58:50Sí,
58:53¿ves? Acá nosotros en este caso no está
58:56entrando eh por el segundo.
59:00Nosotros le quitamos este.
59:07¿Ves que
59:09ingresa? ¿Por qué? Porque esto se creó.
59:15Si le agregamos el AN
59:18acá, lo que va a hacer es validar que
59:19título tenga algo adentro.
59:23No importa que como viste, puede ser un
59:24espacio, puede ser un valor. Ven, si
59:27nosotros le ponemos crear,
59:30dice debe ingresar un valor.
59:32Porque acá toma como que título no tiene
59:34nada dentro. Entonces esta condición no
59:36se cumple y no entra lift, sale
59:40directamente y devuelve foss.
59:44Nosotros le ponemos cualquier cosa, no
59:46sé, un espacio.
59:49¿Ves que ya no dice error? debe
59:51ingresar.
59:51Ah, no. Sí, pero me refiero que igual el
59:54objeto fantasma te lo crea.
59:56Claro, el objeto lo va a crear. ¿Por
59:58qué? Porque estamos creando acá el
59:59controller.
1:00:01Título
1:00:01falta una expresión regular para
1:00:04Claro. Sí, seguro. Sí, sí, sí. para
1:00:07validar que tenga que tenga letras, que
1:00:09tenga espacio, que tenga punto. Eh, eso
1:00:13sí va a depender de lo que
1:00:15se desee ingresar, de los límites que se
1:00:17le quiera dar a ese input.
1:00:20Pero primeramente lo que validamos es
1:00:23que por lo menos tenga algo adentro, se
1:00:25haya escrito algún valor.
1:00:29Sí, como en estos dos casos. El usuario
1:00:32queda así, le pone crear y no o no va a
1:00:35ser válido porque no tiene nada dentro,
1:00:37no se pueden crear listas sin nada. Por
1:00:40lo menos esa es la validación inicial
1:00:42que nosotros hacemos.
1:00:49Sí,
1:00:51tengo alguna librería. Bueno, las
1:00:53librerías javas para para validar, ¿no?
1:00:56Sí, sí, librerías que se pueden usar.
1:01:03Bien,
1:01:07bueno, seguimos. Entonces, ya tenemos
1:01:10validado. Ahora lo que vamos a hacer, en
1:01:13vez de mostrar este
1:01:16mensaje en la consola, la idea sería
1:01:19mostrársela al usuario, ¿sí? Porque
1:01:20recordemos que acá el usuario no lo ve,
1:01:23no sabe qué está pasando. Dice, "Ah, yo
1:01:24quiero que era una lista."
1:01:27En este caso es muy obvio, ¿no? Pero
1:01:28bueno, quizás si ingresa algún valor que
1:01:30no está permitido,
1:01:32eh, le voy a mostrar después un cartel
1:01:34que diga ese valor no está permitido.
1:01:38Siempre lo ideal es informarle todo al
1:01:40usuario, un error, si se creó, si no se
1:01:43creó.
1:01:45Entonces, esto que estamos mostrando acá
1:01:46en consola deberíamos mostrarlo en la
1:01:49pantalla.
1:01:51Entonces, acá la práctica nos dice que
1:01:53usemos un toast controller. Sí,
1:01:58vamos a hacer la importación primero
1:02:01después del alert.
1:02:04Importamos el toas. Lo mismo,
1:02:07actualizamos la importación.
1:02:10¿Ven? Acá Toast Controller viene de la
1:02:12misma librería.
1:02:16La importamos. Pasamos la clase
1:02:20y ahora vamos a crear
1:02:23el código. ¿Para qué? Para que muestre
1:02:28ese ese cartelito, ese mensaje que
1:02:30nosotros queremos indicarle al usuario.
1:02:34Bien,
1:02:37presentó AST. Sí, recibe por parámetros
1:02:41un mensaje. En este caso va a ser de
1:02:43tipo string, la variable va a ser de
1:02:45tipo stram
1:02:49similar al que creamos del del alert
1:02:52controller. Definimos la variable toast.
1:02:56Va a ser eh también una llamada
1:02:58asíncrona,
1:03:00¿sí?,
1:03:02al e a nuestra variable que creamos de
1:03:06clase todas control
1:03:10create se va a llamar también y en este
1:03:12caso
1:03:14va a tener eh dos propiedades, una va a
1:03:17ser message y el otra va a ser duration.
1:03:22El mensaje va a ser lo que va a mostrar
1:03:24el texto que va a mostrar ese cartelito
1:03:28que se le va a asignar lo que se recibe
1:03:31por parámetros y así de esta forma
1:03:33podemos reutilizarlo para los mensajes
1:03:35que querramos mostrar.
1:03:37Entonces este va a ser el mensaje y este
1:03:39va a ser el tiempo de duración en
1:03:41pantalla. 2000 va a ser igual a 2
1:03:44segundos.
1:03:49Sí. Y después una vez que ya se creó
1:03:51esta variable, ¿ven? Se definió el
1:03:53objeto, se creó, se asignó a la variable
1:03:55todas, lo mismo que antes, tenemos que
1:03:58mostrarlo en pantalla. Y para mostrarlo
1:04:00en pantalla se usa la propiedad present,
1:04:03¿sí?
1:04:05Como hicimos acá con alerta.
1:04:09Entonces, ahora lo que tenemos que hacer
1:04:11acá es llamar a este a este método dis
1:04:16punto presentas. Sí. En vez de mostrar
1:04:19una consola, ahora directamente lo vamos
1:04:21a mostrar
1:04:23eh
1:04:25en la pantalla.
1:04:29Venimos crear, ¿ven? Debe ingresar un
1:04:32valor, ¿ven? Duró 2 segundos.
1:04:41Crear. En este caso, ¿ven? Si se creó.
1:04:44Okay. Entonces, acá lo que queremos
1:04:47hacer es si se creó lo mismo,
1:04:50llamarlo y decir que se creó
1:04:52correctamente. Pero eso, ¿cómo vamos a
1:04:54hacer?
1:04:56Y eso lo vamos a saber
1:04:59si
1:05:01validar
1:05:03input de un true.
1:05:09Vamos a llamar también mostrar
1:05:11presentas.
1:05:14Y acá
1:05:16lista creada correctamente.
1:05:20Entonces acáamos si esto es true.
1:05:26¿Por qué? Porque tenía algo adentro.
1:05:28Tenía la variable título y tenía algo
1:05:30adentro ese título. Si es true quiere
1:05:32decir que se creó. Entonces si es true
1:05:35muestra este cartel. Y si es false, ya
1:05:38sabemos que va a mostrar esto. Debe
1:05:40ingresar un valor.
1:05:43Guardamos.
1:05:48debe ingresar un valor. Le ponemos lista
1:05:51uno.
1:05:53Lista creada correctamente.
1:06:05Bien, hasta ahí. Vamos bien.
1:06:17Okay.
1:06:24Sí, ahí no estoy la mano.
1:06:27Sí, en el último, en el tost me dio que
1:06:30perdí. Perdón.
1:06:31Bien. No, no, por favor. Bien.
1:06:35Eh, acá la creación del toast se
1:06:38entendió, se usa la propiedad create,
1:06:42el método create que es de esta clase de
1:06:44la clase toast que fue la que importamos
1:06:47acá, ¿sí? que es de la misma, viene la
1:06:51misma librería
1:06:53de Ionic, la que estamos usando con el
1:06:55AR Controller.
1:06:56Y nada más que en este caso el alert es
1:06:59un cartelito en la pantalla que permite
1:07:00agregar inputs y el toas es un cartelito
1:07:04que va a mostrar un mensaje en pantalla.
1:07:07Esa es la diferencia.
1:07:09Después crearse se utiliza el método
1:07:12create en ambos. Sí, es lo que habíamos
1:07:15usado acá también. ¿Ven? create
1:07:18para darle forma, en este caso a la
1:07:21alerta y ahora al toast.
1:07:25Sí, el toast que va a tener un mensaje,
1:07:27que es lo que es el cartelito que
1:07:29nosotros estamos creando, queremos que
1:07:31muestre la pantalla y una duración, es
1:07:34el tiempo que va a estar en pantalla.
1:07:38Entonces, se le va a informar al usuario
1:07:40qué es lo que pasó acá mediante
1:07:43el mensaje que nosotros querramos
1:07:44pasarle.
1:07:46Acá va a ser un lo usamos como variable
1:07:49para reutilizar este toas control.
1:07:52Y lo que estaba viendo es que en este
1:07:54caso nos aparece en amarill en gris
1:07:57y le podemos agregar eh color
1:08:02suces.
1:08:06Vamos a hacer una cosa.
1:08:17Y con este con este atributo o propiedad
1:08:19lo que podemos hacer es definirle de qué
1:08:21color queremos que sea ese e ese toast,
1:08:25esa mensajito en pantalla.
1:08:28Entonces acá lo que podemos hacer es
1:08:30variar input. En este caso, lo que le
1:08:32podemos pasar
1:08:34es danger.
1:08:36Danger va a ser rojo
1:08:39y en este caso lo que vamosos pasar es
1:08:40suces. Suces es verde. ¿Sí? Entonces
1:08:44nosotros al pasarle esto ya no lo que
1:08:46hacemos es poder reutilizarlo
1:08:49ese toast para los mensajes que sean de
1:08:52okay o mensajes de error, advertencias.
1:08:57Sí.
1:08:59Y después una vez que se definió el la
1:09:02estructura de este objeto,
1:09:04el objeto toas controller, que esta es
1:09:07la estructura que va a tener, estos van
1:09:09a ser los datos que se le van a asignar.
1:09:12En este caso, estos dos datos van a
1:09:14venir por parámetros porque van a ser
1:09:16distintos, van a ser personalizados.
1:09:19La duración va a ser siempre fija, va a
1:09:20ser de 2 segundos.
1:09:22Y toda esta forma, todo este objeto lo
1:09:25asignamos a esta variable. y que va a
1:09:27ser todo esto.
1:09:30En esta instancia solo se creó de objeto
1:09:33y acá lo que hacemos con el método
1:09:36present es le estamos indicando que esto
1:09:39que creamos acá lo muestra en la
1:09:41pantalla.
1:09:43Si no agregamos esto, el objeto se va a
1:09:46crear, pero no se va a mostrar en la
1:09:48pantalla.
1:09:50Vamos a comentarlo esto. Ah, les voy a
1:09:51mostrar en los comentarios.
1:09:54Entonces mostramos eso. Crear. Ven que
1:09:57acá no nos muestra nada. ¿Por qué?
1:10:00Porque este objeto se creó, pero no se
1:10:03mostró en la pantalla. No le estamos
1:10:05diciendo mostrarlo. Entonces guardamos,
1:10:09creamos. Ven, debe ingresar un valor.
1:10:14¿Y dónde lo llamas al message para
1:10:17ponerle? Debe ingresar un valor.
1:10:19Y esto acá en el validar input.
1:10:22Si, bueno, si está okay, le decimos que
1:10:25retorne true y si no, acá llamamos al
1:10:28método
1:10:31Claro. Exactamente.
1:10:32Y acá en este caso le pasamos el mensaje
1:10:34para este caso.
1:10:36En este caso es dice debe ingresar un
1:10:38valor. ¿Por qué? Porque acá se validó y
1:10:40no hay nada. Entonces el para el en este
1:10:43caso, el mensaje para el usuario va a
1:10:45ser que de ingresar un valor y como es
1:10:47un error le pasamos danger, que quiere
1:10:50decir que lo va a pintar de rojo. Danger
1:10:54es rojo.
1:10:55Y luego lo llamamos acá arriba,
1:10:58que es donde tenemos el botón crear.
1:11:01Acá es donde llamamos al variar input.
1:11:04En el if les preguntamos si devuelve
1:11:07true. Acá se valida que sea true
1:11:10porque recuerden que este va a ser un
1:11:12buliano, va a devolver un buliano
1:11:13siempre el método validar input.
1:11:17¿Sí? Entonces, o va a devolver true o va
1:11:19a devolver false. Si es true, si no le
1:11:22ponemos nada, quiere decir que es true.
1:11:24Si es true, va a estar okay. Y acá le
1:11:27decimos que nos muestre este cartelito.
1:11:30Presen todas,
1:11:32lista creada correctamente. Y para este
1:11:33caso va a ser suces, que quiere decir
1:11:36que va se va a pintar de verde.
1:11:39¿Si? Entonces ya tenemos los dos casos.
1:11:43Si no se ingresó un valor y si se
1:11:45ingresó un valor y se creó la lista.
1:11:51Sí se entendió ahí o querés repasar algo
1:11:53más.
1:11:54No, eh si no ingresó un valor, ¿dónde lo
1:11:57llamaste? El dispresent host.
1:11:59En el validar input.
1:12:02Y si
1:12:03método validar input.
1:12:05Eso es si tengo que ingresar un valor y
1:12:08si lo ingresé arriba. Claro. Y si le
1:12:10ingresó
1:12:12en el botón crear,
1:12:14crear.
1:12:15Sí, lo que hace, bueno, tiene la data
1:12:17que esto lo vimos. Acá está el if, llama
1:12:20validar input. Si este devolvió un true,
1:12:23quiere decir que no mostró este cartel.
1:12:25Devolvió true e ingresó por este if y
1:12:28retornó.
1:12:31Entonces, si retorna true, ingresa este
1:12:33if y acá muestra este mensaje
1:12:35en crear. Okay.
1:12:37Exactamente.
1:12:38Gracias. Ahí es donde indica el usuario
1:12:39que la lista fue creada.
1:12:41Gracias.
1:12:43De nada. Entonces, ahora sí vamos a
1:12:45probar. Primero dijimos el crear, ¿ven?
1:12:48No tiene nada. Debe ingresar un valor en
1:12:50rojo. Y si no ingresamos un valor,
1:12:54lista creada correctamente. ¿Ven? Ahí
1:12:56cambio de color a verde. ¿Por qué?
1:12:58porque tiene un valor.
1:13:00Entonces ahí se validó correctamente.
1:13:08Bien,
1:13:10entonces ya estamos validando los datos.
1:13:13Estos console lock los vamos a ir
1:13:14sacando. Si recuerden que a medida que
1:13:17que se vayan validando lo que ustedes
1:13:20van desarrollando, los console lo log
1:13:21los pueden ir quitando. Sí, ya no van
1:13:23haciendo falta porque después le puede
1:13:25quedar ahí alguno colgado. Lo ideal es
1:13:27que no no quede nada en un console log y
1:13:31lo que quieran mostrar se muestre por
1:13:32pantalla.
1:13:34Sí, los consol lo log para ustedes para
1:13:37el desarrollo, nada más.
1:13:42Bueno, e
1:13:48bien, les quería mostrar el tema de los
1:13:50comentarios.
1:13:53Sí, esta es la estructura que va a
1:13:55tener.
1:13:57Sí, acá vamos a usar decoradores.
1:14:02Vamos a poner description.
1:14:08Eh,
1:14:11bien,
1:14:13por ahora este.
1:14:16Entonces, poniendo una barra y dos
1:14:19asteriscos y si le damos un tab, nos va
1:14:21a crear esta estructura y después con el
1:14:25vamos a poder acceder a los decoradores.
1:14:29Cada método, como les decía y que
1:14:30ustedes creen, en este caso este que
1:14:32estamos creando ahora, tiene que tener
1:14:34una un pequeña descripción de qué es lo
1:14:37que hace ese método o función. Si en
1:14:41este caso agregar lista muestra un alert
1:14:44para agregar una nueva lista.
1:14:47Sí, está perfecto. Es lo que hace.
1:14:52En este caso no hay parámetros ni hay
1:14:56valores de retorno, entonces no hace
1:14:58falta.
1:15:00Vamos a la segunda,
1:15:02le damos un tab. Bien, ¿ven? Y ahí
1:15:05automáticamente
1:15:08identificó que hay parámetros y que hay
1:15:10valores de retorno. Lo que nos falta acá
1:15:13es el decorador de descripción.
1:15:17¿Ven? Acá nos da un posible una posible
1:15:20descripción. Valía que el input no esté
1:15:22vacío. Perfecto, es lo que hace.
1:15:26Y acá tenemos parámetro input,
1:15:30¿sí?
1:15:32De tipo Ani
1:15:35es el input que se va a validar y
1:15:37valores de retorno
1:15:42de devuelve
1:15:45acá devuelve un buleano. True el input
1:15:48es válido. False si no lo es.
1:15:51Sí,
1:15:54lo mismo acá
1:16:03muestra un toat con el mensaje y color
1:16:05especificado que son los que vienen acá.
1:16:10Mensaje, texto
1:16:13que se va a mostrar el toast.
1:16:16Color color
1:16:19del toast.
1:16:21Bueno, esto no hace falta porque son muy
1:16:23largos.
1:16:29Bien. Y en este caso valor de retorno no
1:16:31tiene, está vacío. Nani. Cuando es Ani
1:16:34no hace falta.
1:16:36Entonces, lo que habíamos en el
1:16:39documento del TP que hablara acá hablaba
1:16:41de los comentarios,
1:16:43sí se refiere a estos comentarios, no a
1:16:47estos comentarios.
1:16:50muestra el tobastos.
1:16:54Por ejemplo, esto no va. Sí,
1:16:58esto si ustedes cuando están
1:16:59desarrollando lo quieren agregar porque
1:17:01esto, por ejemplo, no está,
1:17:06falta mostrar el tobast. Esto lo pueden
1:17:10dejar así, pero solamente cuando están
1:17:12desarrollando. Una vez que ustedes
1:17:14hicieron esto, que agregaron el togas,
1:17:17el mensajito este, el comentario lo
1:17:19borra. Lo ideal es que acá no esté
1:17:21comentado nada. Dentro del código no
1:17:24debe haber comentarios,
1:17:27solamente los comentarios donde se
1:17:29explica lo que hace la función. ¿Para
1:17:31qué es esto? Y bueno, para cuando un
1:17:33desarrollador, en este caso son
1:17:34funciones cortitas, pero si nosotros
1:17:36tenemos un choclazo acá de una función
1:17:39que llama otra y que llama otra, lo
1:17:41ideal es que un desarrollador que no
1:17:43creó esta función o método
1:17:46con solamente este pequeño texto
1:17:49entienda qué es lo que hace.
1:17:52Sí. Bueno, a ver qué hace esto. Muestra
1:17:54un toat con el mensaje. Ah, listo. Yo
1:17:55estaba buscando, quería cambiarle, no
1:17:57sé, el color al toast o quería cambiarle
1:17:59la duración al toast. Entonces, ya sé
1:18:01que está acá.
1:18:03Sí, acá tiene los parámetros. Bueno,
1:18:05¿qué dice? Tiene dos parámetros. A ver
1:18:06qué recibe el primero. Texto que se va a
1:18:08mostrar el todas y el color. Perfecto.
1:18:11Entonces, esto es para una un
1:18:14documentación del código.
1:18:16Sí. Y esto es lo que documenta las
1:18:19funciones o métodos dentro del código.
1:18:23Deben ir, como les decía, en los métodos
1:18:25o funciones, no en el constructor, no en
1:18:29la clase, no en el component. Esto no
1:18:32hace falta porque porque esto es código
1:18:34puro del componente en sí. Esto va a ser
1:18:37todo lo mismo, ¿no? No no no es
1:18:39necesario eh que tenga un comentario,
1:18:43pero las funciones que ustedes crean,
1:18:45¿sí? ¿Por qué? Porque acá adentro puede
1:18:47tener cualquier cosa,
1:18:50cada función va a ser algo en
1:18:51particular.
1:18:53Entonces,
1:18:55mínimamente que va a tener descripción.
1:18:58Esta tiene que estar en todas,
1:19:00una pequeña descripción nada más. No
1:19:03necesariamente se necesita un choclo.
1:19:06Claro, una pequeña descripción. Listo,
1:19:09cancel.
1:19:11¿Qué más? Después puede tener parámetros
1:19:13si tiene parámetros y valores de retorno
1:19:15en el caso que lo tenga.
1:19:19Sí,
1:19:21lo mismo acá si tiene dos parámetros,
1:19:23los dos parámetros
1:19:26así cortito. V.
1:19:28Entonces esto tiene que estar dentro de
1:19:30todo el código que ustedes describan
1:19:36en TScript, no en HTML. Acá tampoco
1:19:39puede haber comentarios.
1:19:42comentarios que ustedes agreguen acá son
1:19:43para ustedes.
1:19:47A ver, ¿cómo era esto?
1:19:55Eso es un comentario.
1:20:00Lo mismo que antes. Estos comentarios
1:20:01pueden ser para falta el botón de
1:20:05guardar, por ejemplo. Entonces, con esto
1:20:08ustedes tien una ayuda memoria de que le
1:20:10falta algo para desarrollar,
1:20:13pero una vez que lo desarrollan, ese
1:20:15comentario no puede existir. Tiene que
1:20:17ser un código limpio. Sí.
1:20:22Los que se le pide la entrega es este.
1:20:28Repito, escriben barra asterisco
1:20:31asterisco y le dan un tab y le genera
1:20:35automáticamente
1:20:37el formato.
1:20:40¿Se entendió? ¿Alguna duda?
1:20:53Bien,
1:20:59seguimos.
1:21:05Agregamos el toas. Bueno, acá
1:21:07reemplazamos consol. Ya lo hicimos.
1:21:10Documentación. Ah, bueno, justo acá
1:21:12estaba la documentación. Acá está todo
1:21:13explicado. Sí.
1:21:16E bueno, acá también el nombre de la
1:21:17función
1:21:19se puede agregar, por ejemplo,
1:21:23eh, este acá.
1:21:27Estos son todos los decoradores que se
1:21:28pueden usar, function y acá el nombre.
1:21:32Sí,
1:21:35me haya faltado ese. Entonces, estos son
1:21:37los dos mínimos obligatorios,
1:21:41funcion y descripción. Description.
1:21:44Y después en caso que tenga parámetros,
1:21:46todos los parámetros y si tiene valor de
1:21:49retorno en retos.
1:21:54Así que bueno, acá lo tienen bien
1:21:56detallado.
1:21:59Acá le explica lo que le expliqué
1:22:00recién. Son los que hay que agregar.
1:22:05Bien,
1:22:08vamos por la mitad. ¿Qué hora es?
1:22:11Bueno, podemos hacer un pequeño corte.
1:22:13Vamos a instalar esto mientras después
1:22:15seguimos. Dice, "Agregar servicio para
1:22:18guardar las listas." Bien, acá ya vamos
1:22:20a empezar a guardarlas. Sí, como vimos,
1:22:22eh ya estamos obteniendo el nombre. Y lo
1:22:25que les decía es que tenemos que
1:22:26guardarlo en una ray, ¿sí? Porque va a
1:22:28haber varias listas y para eso
1:22:30necesitamos una Ray. Y vamos a empezar a
1:22:33trabajar con servicios.
1:22:36Vamos a ejecutar el comando.
1:22:40Teníamos la otra terminal acá, ¿no?
1:22:42Vamos a abrir una nueva.
1:22:51Ionic generice, lo vamos a guardar en la
1:22:55carpeta services
1:22:57y el servicio llamar lista.
1:23:02Le damos un enter
1:23:06acá. ¿Qué nos dice pseudo? Le ponemos
1:23:08que no.
1:23:13Bien.
1:23:15Services. Lista.
1:23:19Bien. Eh,
1:23:22lo que veo es que
1:23:25nos pasó la otra vez, eh, es que la esta
1:23:27nueva versión de Ionic le pone
1:23:30decoradores, ¿sí?, a los servicios.
1:23:37¿Ven? dejó dejó de ponerle esto que le
1:23:40ponía acá, inyectable,
1:23:44y ahora usa decoradores y tampoco le
1:23:46pone el nombre punto service,
1:23:50que es como se lo llamaba la lista, a
1:23:52los servicios. Vamos a cambiar el nombre
1:23:54lista punsice.
1:24:00Y en este caso le vamos a agregar lo
1:24:01mismo porque este archivito
1:24:05lista pun observes
1:24:08funcionan en conjunto. Lo cerramos
1:24:14no guardar.
1:24:22Lista.
1:24:30Bien.
1:24:33Okay. Lista service. Vamos a poner el
1:24:36nombre.
1:24:40Y acá
1:24:42tiene ah, tenía otro decorador que es
1:24:45in.
1:24:52Por ahora vamos a seguir trabajando de
1:24:53esta forma.
1:25:03Bien.
1:25:09cambiamos.
1:25:14Volvemos acá.
1:25:21Bien. Bueno, ya tenemos creado el
1:25:23servicio.
1:25:25E ahora tenemos que crear, bueno, el
1:25:28constructor
1:25:31constructor.
1:25:33Y acá nos dice que queremos una un
1:25:36objeto publicas
1:25:40de tipo AN. Bien,
1:25:44decimos que va a ser una Ray cuando le
1:25:46indicamos los corchetes y en este caso
1:25:48va a ser de tipo ANI. Sí, no va a tener
1:25:51forma por ahora. Inicialmente lo vamos a
1:25:54crear así, lo inicializamos vacío, ¿sí?,
1:25:56obligatoriamente
1:25:58y decimos que va a ser público. Eh, si
1:26:00está así es lo mismo.
1:26:03Recuerden que tenga la palabra public o
1:26:04no la tenga,
1:26:08va a ser public. Sí, es lo mismo ponerla
1:26:11de las dos partas.
1:26:13La dejamos para que se entienda
1:26:18bien. Bueno, e llegamos entonces a este
1:26:20hasta este paso.
1:26:22Vamos a hacer un corte hasta las 8:30 y
1:26:25después seguimos con la otra mitad de la
1:26:27práctica.
1:26:32Sí, pongo acá.
1:26:37Volvemos 20 30 horas.
1:26:41Bien. Bueno, nos vemos en 15 minutitos.
1:45:06Bueno, seguimos.
1:45:13Les quería eh compartir primero
1:45:19un documento
1:45:21e que tiene la guía de nomenclaturas y
1:45:23buenas prácticas de Tcript, ¿sí? y más
1:45:26que nada cómo se deben nombrar las
1:45:29funciones, bueno, variables, métodos,
1:45:32etcétera. Y acá algunas se usan con
1:45:36camel case,
1:45:38otras con Pascal case y acá les dice
1:45:40dónde, clases, interfaces, tipos. Sí,
1:45:43acá hay ejemplos,
1:45:45upper case e constantes globales,
1:45:49valores que nunca cambian, así que son
1:45:51const.
1:45:53Acá tenemos nomenclatura de variables y
1:45:55ejemplos de correctos incorrectos.
1:46:00Sí,
1:46:02más o menos lo fuimos nombrando de esta
1:46:06forma, pero bueno, acá está eh más que
1:46:08nada un documento donde tiene todo para
1:46:11que para que lo tengan. Lo que me iba a
1:46:14fijar es si lo subí a ver al aula,
1:46:18así ya les confirmo.
1:46:28A ver, clase unidad 7
1:46:31práctica no está. Se lo subo yo mismo.
1:46:35Si lo tienen
1:46:37esto.
1:46:40Unidad 7.
1:46:434
1:46:48ya.
1:47:22Siguiente. Eh,
1:47:26n.
1:47:35Bien, el arch se llama guía
1:47:36nomenclaturas y buenas prácticas en
1:47:38Typescript.
1:47:41Guardar.
1:47:51Bien, entonces ya lo deberían tener en
1:47:54la unidad 7 del aula virtual
1:47:59para que lo puedan descargar y bueno y
1:48:01utilizarlo
1:48:03en caso que que tengan dudas. Bueno,
1:48:07como les decía, está el nombre de todo,
1:48:10clases, métodos, interfaces.
1:48:13Acá les da ejemplos de cómo llamarlos.
1:48:18Sí, hay un montón interfaces.
1:48:22Bueno, antes las interfaces eh se usaba
1:48:24como prefijo la I a la izquierda del
1:48:28nombre de interface. Ahora ya no se usa
1:48:29más.
1:48:32Sí.
1:48:37Bueno, acá les dice el por qué.
1:48:40[carraspeo]
1:48:42Nomenclatura de propiedades,
1:48:45variables de constructor,
1:48:51los modificadores de acceso, bueno, que
1:48:53nosotros vimos public private.
1:48:56¿Qué más está? Está protect también.
1:48:58¿Para qué se utiliza cada uno?
1:49:02Más nomenclatura de NS.
1:49:07Bueno, está bastante completo este este
1:49:09documento.
1:49:11Componentes. ¿Ven el nombre del
1:49:13componente?
1:49:19Servicios.
1:49:20Mir acá lo que le decía nombre punto
1:49:22service, que ahora no sé por qué no lo
1:49:24pone más eh
1:49:28a cuando se instala,
1:49:33pero así deberían estar los servicios.
1:49:35El nombre del servicio punservice.ts.
1:49:40Los archivos interface también el nombre
1:49:42interface punto interface
1:49:46los modelos también los W.
1:49:51los pipes. Vamos a ver qué es un pipe.
1:49:58Y bueno, la organización de carpetas,
1:50:00ejemplo profesional acá para que lo
1:50:02tengan para sus proyectos.
1:50:06Sí. Components, page, service,
1:50:08interfaces, modelos.
1:50:16Bueno, acá tienen toda una guía bastante
1:50:18completa.
1:50:24Sí, acá hay un resumen al final y una
1:50:27conclusión. Así que bueno, ya tienen
1:50:30este archivo subido ahí al aula. Les
1:50:31repito, era unidad 7. La unidad 7 ya lo
1:50:35tienen listo.
1:50:38Bien,
1:50:40después descárguenselo, véanlo así.
1:50:44lo tiene. Bueno, volvemos.
1:50:52Eh, ventana. Vamosamos.
1:50:56Y acá creo que había algo.
1:51:00Está bien. Creo que el primero acá.
1:51:02¿Ven? Este está mal.
1:51:04Agregar lista.
1:51:07Estaba con la primera letra mayúscula y
1:51:09como vimos va con minúscula. Y tenemos
1:51:12que arreglarlo acá, si no va a dar
1:51:14error. Correcto. Bien. ¿Alguna duda
1:51:17hasta acá? ¿Algúo que quieran consultar?
1:51:21No se hemos quedado acá.
1:51:26Lista Service.
1:51:29Eh, seguimos. ¿Algo quieren consultar?
1:51:37Bien. Bueno,
1:51:45seguimos avanzando.
1:51:47Estamos en el paso 19, ya creamos el la
1:51:52variable listas
1:51:54que va a almacenar el rey de listas.
1:51:58Ahora nos pide que creemos la la función
1:52:00o método crear lista.
1:52:03Vamos a copiar esto primero y ahora
1:52:05vemos qué es lo que hace esto. Todo va
1:52:08dentro del e
1:52:11servicio. Sí, el servicio va a ser
1:52:13encargado de trabajar con las listas,
1:52:16tanto de crearlas, modificarlas.
1:52:19Bien, crear lista.
1:52:23Recibe por parámetro nombre lista que es
1:52:25de tipo stram.
1:52:27Acá creamos un objeto de tipo lista.
1:52:31Sí, lo definimos con LED y acá creamos
1:52:34el objeto entero.
1:52:36Dice, bueno, creamos una variable de
1:52:38tipo array. Estos son los comentarios
1:52:42que solamente son informativos que
1:52:43después no deberían quedar.
1:52:46Bien, ¿qué va a tener una ID?
1:52:51Inicialmente lo estamos hardcodeando en
1:52:53cero. Un título, el nombre de la lista,
1:52:57que este va a ser el que reciba por
1:52:58parámetros.
1:53:00¿Qué más? La propiedad eh creada en que
1:53:03va a tener la fecha de creación
1:53:05terminada en en este caso va a ser nula.
1:53:08El dato va a ser nulo. ¿Por qué? Porque
1:53:10no tenemos fecha de cuando se terminó
1:53:12todavía porque recién se acaba de crear.
1:53:15completada va a estar en false y acá en
1:53:18items va a ser la lista de actividades
1:53:22y acá le podemos poner actividades mejor
1:53:25actividades.
1:53:31Y una vez que se creó este objeto, lo
1:53:34que vamos a hacer, vamos a llamar al
1:53:36objeto de a la variable listas, que es
1:53:38el objeto global, que es un lo definimos
1:53:42como un array de anis.
1:53:44Sí. Y con push le vamos a insertar este
1:53:48nuevo objeto listas.
1:53:52Sí, acá dice, "Ingresamos en el array
1:53:56de listas el objeto con los datos
1:53:58creados." Entonces acá se van a empezar
1:54:00a guardar en esta raí.
1:54:08Vamos bien,
1:54:16perfecto. Seguimos.
1:54:20Bueno, acá está tiene todo como queda.
1:54:23Ahora nos dice que vamos a crear la
1:54:24función guardar storage. Sí, para
1:54:27guardar las listas en el storage
1:54:30solo se pueden guardar los datos como
1:54:32texto plano. Eso téngalo en cuenta.
1:54:39Vamos acá.
1:54:41Bien, guardar estas se llama. Definimos
1:54:44una variable que se llama string listas.
1:54:47va a ser el tipo stram.
1:54:50¿Y qué le vamos a asignar?
1:54:52Vamos a usar e
1:54:57e la función de JavaScript,
1:55:01que es de Jason para convertir objetos.
1:55:06En este caso, ¿qué vamos a convertir?
1:55:08Nuestro array de listas.
1:55:10Sí, mediante el método Tringify
1:55:15lo que hace es convertir un objeto,
1:55:19en este caso es una array de objetos
1:55:23en texto plano porque como dijimos el
1:55:26local storage solo almacena texto plano,
1:55:29entonces no puede almacenar un objeto,
1:55:32pero
1:55:34con esto podemos convertirlo
1:55:37en un Jason.
1:55:39Sí.
1:55:40En Jason dijimos que va a ser un texto
1:55:42plano. Acá está.
1:55:45Luego
1:55:47mediante local storage,
1:55:50si esta es una variable reservada del
1:55:53tipo storage, un nombre reservado
1:55:58que mediante el método set item va a
1:56:02guardar datos en el local storage. Local
1:56:05storage lo que tenemos acá.
1:56:12Eh, memoria, no, memoria no era. ¿Dónde
1:56:16está
1:56:18aplicación?
1:56:21Almacenamiento local.
1:56:23Bueno, acá están en español.
1:56:27Tenemos el local storage, que es
1:56:29almacenamiento local, y el session
1:56:30storage, que es el almacenamiento de la
1:56:32sesión. Y nosotros estamos trabajando
1:56:34con este puerto, con el local host.
1:56:39Acá quedó, bueno, quedó el eh guardado
1:56:42el de la clase anterior. Esto lo vamos a
1:56:45ver si se puede eliminar
1:56:48acá. Borrar. Bien.
1:56:51Si ven, y están los dos vacíos.
1:56:53Entonces, nosotros vamos a trabajar con
1:56:54el local storage, dijimos almacenamiento
1:56:56local.
1:56:58El local storage lo que hace es guardar
1:57:00una clave y un valor. Sí, la clave se
1:57:04utiliza para poder acceder a ese valor
1:57:06que se que fue almacenado.
1:57:10Entonces, mediante set item, vamos a
1:57:13guardar los datos que nosotros querramos
1:57:15en el local storage y le vamos a tener
1:57:18que pasar dos valores
1:57:20que son los que dijimos recién,
1:57:23una clave
1:57:25y el valor
1:57:27clave.
1:57:29En este caso se va a llamar listas
1:57:32y el valor va a ser el contenido
1:57:36de nuestra rey de listas que lo
1:57:38transformamos
1:57:40a texto plano. Sí, acá dice se va a
1:57:44ingresar dos parámetros. El primero va a
1:57:46ser un nombre y el segundo el contenido.
1:57:48El nombre hace referencia a la clave,
1:57:51clave y valor. Entonces de esta forma
1:57:55nosotros vamos a almacenar nuestro
1:57:57listado en el local storage para para
1:58:01persistir esos datos y que no se pierdan
1:58:04ante un eventual
1:58:07refresco del de la aplicación. En este
1:58:10caso, nosotros estamos trabajando con
1:58:11con
1:58:13el navegador. Si lo refrescamos podemos
1:58:16perder lo que tenga nuestro array.
1:58:20Y de esta forma al guardarlo en el local
1:58:22storage
1:58:23nos queda el y podemos recuperarlo, ¿sí?
1:58:27En caso de que se actualice el
1:58:28navegador.
1:58:30Bien, creada nuestra
1:58:33nuestro método,
1:58:36ahora lo tenemos que llamar.
1:58:41Entonces, en nuestra función crear
1:58:43lista,
1:58:45una vez que guardamos nuestro nuevo
1:58:47objeto en la Ray, vamos a llamar a
1:58:51guardar.
1:58:55Entonces, de esta forma se inserta el
1:58:57objeto en el array y luego se guarda.
1:59:03Entonces, esto
1:59:05está centralizado en nuestro servicio.
1:59:07Sí.
1:59:08en nuestro servicio de lista.
1:59:13Bien, ahora lo que tenemos que hacer es
1:59:15llamar a este eh servicio.
1:59:20¿Dónde lo vamos a llamar?
1:59:22En el tab uno, que es donde nosotros
1:59:26estamos agregando la lista. ¿Dónde?
1:59:29Bueno, luego de validarla.
1:59:32Sí. Para eso, ¿cómo hacemos? Tenemos que
1:59:36declarar nuestra variable de servicio.
1:59:41Eh, lista service.
1:59:43Hacemos la importación de nuestro
1:59:45servicio. ¿Ven? Services, lista service,
1:59:50está en esta ubicación. Services, lista
1:59:53services.
1:59:55Y entonces ahora nosotros podemos
1:59:57acceder a todos los objetos públicos.
2:00:03Sí, vamos a acceder a listas, podemos
2:00:06acceder a la el método crear lista y
2:00:08guardar estash.
2:00:10Nosotros, por ejemplo, venimos acá, era
2:00:14eh luego que se valide el input
2:00:18lista service punto, ven, nosotros
2:00:20podemos acceder a cualquiera de todos
2:00:23estos, ya sea métodos o variables. ¿Por
2:00:26qué? Porque son todos públicos.
2:00:28Entonces,
2:00:30la ray de listas se va a trabajar en el
2:00:33servicio.
2:00:35Entonces, este va a ser privado.
2:00:38¿Para qué? Para que solo se pueda
2:00:39invocar dentro de esta clase.
2:00:43Entonces, acá ahora ponemos punto ven y
2:00:45ya desapareció el el array. No se tiene
2:00:48que poder acceder. Y guardar storage
2:00:51tampoco.
2:00:53¿Por qué? Y porque se está llamando acá.
2:00:55Entonces vamos a ponerlo como privado.
2:00:59Nosotros solo queremos acceder a crear
2:01:01lista.
2:01:05¿Ven? Ahora si ponemos puntos solamente
2:01:09podemos acceder al método crear lista.
2:01:14Y este método nos pedía el nombre de la
2:01:15lista y el nombre de la lista estaba en
2:01:18data
2:01:20y en la variable título, que es el
2:01:23nombre que le dimos al input.
2:01:25Sí, donde se guardaba el dato. Eso es lo
2:01:29que tenemos que pasarle como nombre de
2:01:31la lista.
2:01:32Entonces, invocamos al servicio, lista
2:01:36service, como lo declaramos nosotros acá
2:01:38arriba,
2:01:40y al método crear lista. Entonces, lo
2:01:43creamos. El servicio se encarga de
2:01:45crear, crea el objeto, como dijimos, con
2:01:47el nombre que le pasamos, lo insertal en
2:01:50array y luego guarda el storage.
2:01:54Entonces vamos a guardar esto acá.
2:01:57Vemos si compiló.
2:02:00Compiló todo bien. Y vamos a probar
2:02:06lista uno. Crear. Lista creada
2:02:09correctamente. ¿Ven? Ahora ya en el
2:02:12local storage tenemos nuestro objeto
2:02:16listas, clave listas
2:02:19y acá ven, tenemos todo el objeto. Si
2:02:22bien acá lo tenemos como texto plano,
2:02:24acá lo podemos ver como objeto.
2:02:26Sí. Bueno, acá tenemos la fecha. Acá
2:02:29tiene 2 horas, 3 horas más.
2:02:32ID0 terminada en nulo porque dijimos que
2:02:35iba a ser nulo. Actividades vacío
2:02:37completada fals. Título lista uno que
2:02:40fue el que nosotros le dimos. Si creamos
2:02:43otra lista dos.
2:02:48¿Ven? Ya se actualizó. Lista uno, lista
2:02:51dos,
2:02:54cada una con su horario.
2:02:57Y así se va a ir se van a ir agregando
2:03:00todos.
2:03:01los que vaya agregando el usuario. Ya
2:03:04tenemos tres
2:03:06y nosotros actualizamos.
2:03:10Se sigue manteniendo la ray.
2:03:14¿Qué pasa si insertamos otra?
2:03:19Se perdió y se pisó.
2:03:24Si bien el objeto se mantuvo
2:03:28en el local storage
2:03:30al momento de guardar,
2:03:33porque nosotros habíamos actualizado,
2:03:35habíamos refrescado, al momento de
2:03:37guardar
2:03:39se pisó. ¿Por qué? Y porque cuando carga
2:03:41el componente nuevamente, esto se carga
2:03:44como Ani, se carga vacío.
2:03:47Y nosotros lo que hacemos acá en guardar
2:03:49storage, le estamos diciendo que guarde
2:03:50la ray. Y en este caso, cuando agregamos
2:03:53la lista cuatro, el array estaba vacío,
2:03:57por eso es que lo pisó,
2:04:00¿sí? Y quedó solamente la lista cuatro.
2:04:02Entonces, antes de guardar,
2:04:06lo que nosotros deberíamos hacer, por
2:04:09ejemplo, en el constructor es crear un
2:04:12nuevo un nuevo método que se encargue de
2:04:14recuperar lo que hay con esta clave en
2:04:17el local storage. lo recupera, lo asigna
2:04:21al a nuestro objeto de listas, a nuestro
2:04:24radio de listas,
2:04:26y una vez que lo que lo asigna, recupera
2:04:28el valor, recupera todo lo que tenga
2:04:30dentro y recién ahí después puede seguir
2:04:33insertando.
2:04:35Sí,
2:04:37eso es lo que nos faltaría.
2:04:40Por ahora ya vemos que guarda
2:04:43bien. Hasta ahí vamos bien. ¿Alguna
2:04:45pregunta?
2:04:54Bien,
2:04:57¿qué dice acá?
2:04:59Agregamos un control de validación antes
2:05:00de ingresar los datos. Bueno, esto ya lo
2:05:01habíamos hecho.
2:05:03Lo que hace acá, en vez de validarlo
2:05:06directamente, ¿ven? Le asigna el
2:05:08resultado de validar input a una
2:05:09variable.
2:05:11Pero nosotros, ¿qué hicimos en el tab
2:05:13uno?
2:05:14validamos esto acá. Lo que dice que es
2:05:17es válido.
2:05:21Ven, en el ejercicio hace esto.
2:05:27Es lo mismo. Nada más que acá declaramos
2:05:29una variable más.
2:05:33Sí, el resultado que nos da validar
2:05:35input, que dijimos que iba a ser un
2:05:36buleano,
2:05:38se lo asignamos a esta variable. En
2:05:40cambio, como lo teníamos nosotros,
2:05:43eh, lo validamos directamente.
2:05:49Lo dejamos así y ustedes en la práctica
2:05:51lo tienen de esta forma.
2:05:54Bien, entonces al validarlo,
2:05:57¿sí? Ya nosotros si está si está bien el
2:06:00dato, si se cargó un dato correctamente,
2:06:03ya podemos guardarlo en nuestro array y
2:06:06luego mostrar
2:06:08el toast donde se creó la lista.
2:06:13Bien,
2:06:17¿qué nos dice? Validamos si la lista fue
2:06:19creada. Para esto, en el servicio
2:06:21devolvemos, debemos retornar un valor.
2:06:24En este caso podemos retornar el nombre
2:06:26de la lista.
2:06:31Entonces, en el servicio que nos dice
2:06:32acá, le damos un return,
2:06:38eh, el nombre devuelve si objeto lista
2:06:41punto
2:06:47también puede retornar un buuliano, ¿no?
2:06:52Pero bueno, en este caso como no se
2:06:53valida nada, a no ser que arroje error,
2:06:56siempre va a volver el título.
2:07:03Eh, entonces acá
2:07:06lo que nos va tenemos que hacer es
2:07:07asignar ese valor
2:07:11y después hacer la verificación.
2:07:32Esto que tenemos acá, ¿ven? Que ahora
2:07:34devuelve
2:07:36el título de la lista.
2:07:40¿Qué estamos haciendo? Lo estamos
2:07:41asignando a la variable creado. OK. Y
2:07:43acá hacemos lo mismo que seamos en
2:07:45validar, validar input.
2:07:48Variamos que esto tenga algo adentro y
2:07:50qué va a tener y el título de la lista.
2:07:55Sí, es como para verificar que se creó.
2:07:58Acá se verifica si la variable tiene un
2:07:59valor, es decir, que fue creada.
2:08:02Y recién ahí devolvemos entonces nuestro
2:08:06toast con que la lista se creó correcta.
2:08:11Eh, ¿qué pasó acá? abre pisado.
2:08:16Bien, entonces tenemos la validación
2:08:18primero de de la del título de la lista,
2:08:21ingreso en el input del usuario y
2:08:23después tenemos la validación de que se
2:08:25haya creado el objeto lista dentro de
2:08:29nuestro array del servicio y guardado en
2:08:31el storage. Esto se hizo OK. recién ahí
2:08:34le respondemos al usuario
2:08:36eh que la lista se creó correctamente.
2:08:44Bien, acá, bueno, no vamos a ver ningún
2:08:46cambio en el COI en el la forma de
2:08:48actuar.
2:08:51Lista uno nuevamente.
2:08:55Acá como guardamos esto se volvió a
2:08:58refrescar.
2:09:01Bien.
2:09:06Bueno, acá si refrescamos elador y
2:09:07agregamos una nueva lista, podemos ver
2:09:10que los datos de la lista creadas antes
2:09:11se borraron.
2:09:13Era porque no la recuperamos. Y para
2:09:16evitar, bueno, como les decía, para
2:09:17evitar que eso suceda, lo primero que
2:09:19tenemos que hacer es cargar storage.
2:09:24Sí, vamos a crear esta nueva, este nuevo
2:09:26método en el servicio. Y luego de
2:09:30guardar
2:09:37también lo vamos a definir como privado
2:09:39porque solamente queremos que se acceda
2:09:42dentro del servicio y no desde fuera,
2:09:45desde donde se lo invoque al servicio.
2:09:48Bien, ¿qué vamos a hacer? Definimos una
2:09:50constante. ¿Por qué? Porque este valor
2:09:52no se va a modificar.
2:09:55Lo mismo que antes, local storage para
2:09:57acceder a sus métodos o funciones.
2:10:01Y en este caso era set para setear, para
2:10:04guardar, para obtener va a ser get
2:10:09item. Y acá le tenemos que pasar la
2:10:12clave. ¿Qué queremos obtener de local
2:10:15storage? Y lo que tenga dentro esta
2:10:17clave.
2:10:20listas es la clave y queremos obtener
2:10:23nuestro array.
2:10:26Sí, nuestro array.
2:10:28Entonces, lo que esté dentro de este de
2:10:30esta clave
2:10:34lo vamos a asignar a listas storage. Acá
2:10:37valiamos si es nulo,
2:10:41vamos a retornar una lista vacía.
2:10:45el storage va a estar porque está vacío,
2:10:47entonces la lista va a estar vacía y si
2:10:49no que en realidad esto lo podemos eh
2:10:54lo podemos dejar así porque cuando se
2:10:56inicializa se inicializa vacía. Pero
2:10:57bueno, acá está validada de las dos
2:10:59formas y si no es nulo, quiere decir que
2:11:02tiene algo
2:11:04que como dijimos antes, el local storage
2:11:07almacena extoplano.
2:11:11Entonces nosotros tenemos que hacer el
2:11:13camino inverso que hicimos con el
2:11:15stringify.
2:11:17Tenemos que volver a convertir a objeto
2:11:19ese texto plano.
2:11:21Misma librería Jason. Pero ahora en vez
2:11:24de usar stringify,
2:11:26usamos parcear de texto plano a objeto
2:11:30lista.
2:11:33Entonces este valor
2:11:37lo convertimos en objeto
2:11:40y después se lo asignamos a nuestro
2:11:43array de listas.
2:11:45en listas igual a objeto listo.
2:11:54Sí. Entonces, ya tenemos recuperamos del
2:11:59storage
2:12:00lo que estaba guardado en nuestra clave
2:12:03listas.
2:12:05Y ahora lo que nos falta es llamar esta
2:12:06función,
2:12:08este método.
2:12:13Sí, acá nos dice que lo llamemos en el
2:12:14constructor. ¿Para qué? para que cuando
2:12:16carga el servicio
2:12:18llame
2:12:21a el método cargar storage. Sí,
2:12:25acá dentro le hacemos dis punto cargar
2:12:28storage.
2:12:34Entonces, cuando, como dije recién,
2:12:36cuando se cargue el servicio,
2:12:41cuando se instancie el servicio porque
2:12:42es una clase,
2:12:45va a ejecutar todo lo que esté dentro
2:12:46del constructor
2:12:50y en el constructor está el cargar
2:12:52storage.
2:12:55Ahora venimos acá, vemos si funcionó.
2:12:58Teníamos lista uno. Vamos a ver si ya
2:13:01toma el cambio. Lista dos.
2:13:04Ven. Y lista uno nos había quedado
2:13:07creada de antes
2:13:09y ahora tenemos las dos listas
2:13:13y seguimos agregando. Lista tres
2:13:19creada correctamente. Nosotros
2:13:20actualizamos
2:13:25lista cuatro.
2:13:28Ven. Y ahora hagamos lo que hagamos. Ya
2:13:33está actualizando, está recuperando
2:13:35primero
2:13:36lo que estaba guardado
2:13:39en la clave listas
2:13:42y una vez que lo recuperó sigue la
2:13:44carga, sigue cargando nuevas listas.
2:13:47Esta es una persistencia de datos,
2:13:52nada más que bueno, lo hacemos en el
2:13:54local store.
2:14:00Bien,
2:14:04¿qué más? Seguimos.
2:14:17Cargar storage.
2:14:19Ahora saltando
2:14:25listando actividades.
2:14:32Okay. En realidad
2:14:34listando actividades, ¿no? Lo que vamos
2:14:35a listar ahora son las listas, valga la
2:14:38redundancia. ¿Por qué? porque nosotros
2:14:40las tenemos en el array, pero nos la
2:14:43vemos en la pantalla. ¿Sí? ¿Ven? Lo que
2:14:46tenemos que hacer ahora es trabajar
2:14:49desde el lado de HTML para mostrar todo
2:14:52lo que tenemos en el array.
2:14:57Bien.
2:15:02Eh, bueno, acá en el HTML nos dice que
2:15:04borremos esto. Creo que ya lo habíamos
2:15:06borrado.
2:15:07Sí.
2:15:09En el ion content solo tenemos nuestro
2:15:12botón para agregar listas.
2:15:15Ahora acá arriba lo que vamos a hacer es
2:15:19recorrer
2:15:24el array de listas.
2:15:30Bien, entonces vamos a crear un objeto
2:15:33ion list.
2:15:35va a ser una lista, va a tener íems,
2:15:39¿sí? Por cada íem,
2:15:43sí,
2:15:45por cada objeto que tenga la lista
2:15:48va a crear un íem
2:15:51usamos para recorrer. Dijimos que confor
2:15:53recorríamos listas. En este caso vamos a
2:15:56recorrer nuestro array de listas desde
2:15:58lista service. Ahora sí
2:16:01vamos a necesitar acceder al array.
2:16:06Si tenemos dos caminos, ponemos el array
2:16:10como público
2:16:12o creamos un eh un método que devuelva
2:16:16el array.
2:16:19¿Por qué? Porque si nosotros lo ponemos
2:16:21[carraspeo] público
2:16:24desde donde lo llamemos, vamos a poder
2:16:26hacer lo que querramos, tanto hacer un
2:16:27push
2:16:30para agregar objetos, quitar objetos.
2:16:37Entonces, eso no recuerdo si estaba acá
2:16:39ya, pero la idea, vamos a crearlo ahora
2:16:45vamos a ponerle
2:16:49obtener
2:16:54obtener listas
2:16:57y esto que va a devolver retour de
2:16:59listas.
2:17:03y lo dejamos así para que sea público.
2:17:07Entonces, de esta forma
2:17:11nosotros accedemos a la raya de listas,
2:17:13pero solamente lo podemos recorrer,
2:17:17no podemos eh acceder directamente a la
2:17:21radio.
2:17:26Bien, ¿qué podemos hacer? Em,
2:17:31vamos a crear un objeto nuevo.
2:17:40Vamos a crear acá en el nuestro tab un
2:17:42nuestro propio array de listas.
2:17:45Y en el constructor
2:17:48vamos a cargarlo. Dis listas
2:17:53que es nuestro array.
2:17:56Llamamos a obtener listas.
2:17:58Sí. Entonces, ahora sí solamente vamos a
2:18:03trabajar con nuestras listas.
2:18:06Y acá
2:18:08en vez de llamar al servicio, como
2:18:10estaba en la práctica,
2:18:12nuestra nueva versión va a trabajar con
2:18:16las listas
2:18:19eh del tab.
2:18:30A ver, vamos a guardar a ver si
2:18:32efectivamente
2:18:35funciona bien.
2:18:39Privado. A ver, así vamos que ser
2:18:43público
2:18:45para poder accederlo desde el HTML. Si
2:18:48es privado, solamente se limita al
2:18:50ámbito de clase dentro de nuestra clase.
2:18:56Bien, ahora ven, ya nos tenemos el
2:18:59listado cargado en la pantalla.
2:19:04Con el shifor recorrimos el array de
2:19:08listas de nuestro tabuno.
2:19:12El mismo fue cargado cuando se carga el
2:19:15tabuno en el constructor.
2:19:19Sí. Mediante el método obtener listas
2:19:22del servicio, que fue el que declaramos
2:19:25acá último.
2:19:28Obtener listas.
2:19:30Sí. y el cual retorna
2:19:35las listas del servicio. Entonces, de
2:19:38esta forma solo se puede recorrer las
2:19:42listas y no se modifica el array
2:19:44original.
2:19:47Si podemos modificar el este array en
2:19:49este
2:19:51dentro del tab un podemos hacer lo que
2:19:52querramos, pero no va a impactar sobre
2:19:57Bien. Entonces, una vez que lo tenemos
2:19:58cargado, lo recorremos.
2:20:01Entonces, elfor que hace declara
2:20:05una variable lista item y mediante off
2:20:09cada vez que recorra el listas por cada
2:20:12objeto lo va a asignar.
2:20:15Va asignar un objeto, dos objetos, tres
2:20:17y la cantidad de veces
2:20:20e
2:20:21según la cantidad de objetos que tenga
2:20:24la raya de listas.
2:20:26Y después le estamos diciendo con un ion
2:20:28label, que es una etiqueta,
2:20:30que de cada uno de ese lista íem muestra
2:20:34el título de la lista.
2:20:37Entonces, como tiene cuatro objetos, lo
2:20:40va a recorrer cuatro veces y cada uno lo
2:20:42va a asignar acá. Lista íem, se va a
2:20:45mostrar título.
2:20:47Lista íem, lista dos. Lista íem, lista
2:20:52tres.
2:20:53Lista íem, lista cu.
2:20:57Sí, por cada un por cada pasaje del
2:21:00bucle este objeto se crea nuevo.
2:21:04Se crea nuevo, le asigna el primer
2:21:06objeto, muestra el dato.
2:21:09Segundo pasaje, se crea nuevo,
2:21:14muestra el objeto
2:21:16y así sigue recorriéndolo.
2:21:21Por eso quedemos lista 1, 2, 3 y cuatro.
2:21:24V. Nosotros listamos solamente el título
2:21:27y acá podemos listar lo que querramos.
2:21:30El ID
2:21:33en este caso, ven que es todo cero.
2:21:38Podemos acceder a las propiedades del
2:21:40objeto,
2:21:43pero bueno, lo mejor es obviamente
2:21:44mostrar el título.
2:21:50Bien, ¿alguna duda?
2:22:03Bueno,
2:22:10seguimos.
2:22:15Bien,
2:22:17ahora, ¿qué nos dice? Vamos a agregar
2:22:19opciones.
2:22:21¿Para qué? Porque nosotros podemos o
2:22:24modificar el nombre de la lista o quizás
2:22:27querramos eliminarla. Hoy por hoy no
2:22:30podemos hacer nada, solamente la estamos
2:22:32creando y listando.
2:22:35Entonces tenemos ioniten options,
2:22:38¿sí?
2:22:40el cual le agrega opciones
2:22:45e
2:22:47a nuestro eh listado.
2:22:51Entonces,
2:22:54options, bien, lo vamos a agregar acá
2:22:57abajo.
2:23:04Ese lo borramos y en vez de ionem tiene
2:23:07que ser ion item.
2:23:09Slide, no, que borramos
2:23:12list, ¿no?
2:23:15Eh, este,
2:23:18a ver,
2:23:21ion list, ion item. Acá
2:23:26de cierre y este tiene que ser de
2:23:29apertura.
2:23:33dar formato. Bien,
2:23:36entonces
2:23:38agregamos esta parte, el ion item
2:23:41sliding. Sliding quiere decir que eh ese
2:23:44íem se va a mover
2:23:47para un lado o para el otro.
2:23:50de primero tenemos el listado
2:23:55para mostrar el título. Esto tiene que
2:23:57quedar igual porque si no no va no va a
2:23:58tener que mostrar el dato.
2:24:03Y luego tenemos opciones.
2:24:13Sí,
2:24:16tenemos
2:24:18primera opción
2:24:20item options,
2:24:22que va a ser hacia el inicio, el lado
2:24:25izquierdo.
2:24:28En este caso, la opción va a ser de
2:24:30color amarillo
2:24:32y va a ser editar. Acá cuando se le da
2:24:35click,
2:24:36bueno, acá tenemos que agregar la
2:24:40función editar. Lista.
2:24:43Y acá eliminar.
2:24:48Listo.
2:24:49Sí. Entonces, cuando lo corramos para el
2:24:51lado izquierdo,
2:24:56va a estar el color amarillo,
2:24:59el botón editar.
2:25:01Cuando le vamos critar a editar lista
2:25:05con
2:25:08lista íem.
2:25:10Y ahora que veo esto, debería estar acá
2:25:12abajo.
2:25:15Item sliding.
2:25:19Y esto debería estar
2:25:23Sí,
2:25:29ahora sí.
2:25:35Bien,
2:25:38entonces
2:25:39función editar lista se le va a pasar el
2:25:41íem en el cual hagamos clic
2:25:44porque como tenemos varios
2:25:47de esta forma va a identificar a cuál
2:25:48estamos haciendo clic
2:25:51a pasarle lista el íem es el hace click.
2:25:55Y si lo corremos para el lado de la
2:25:57derecha, ¿ven?
2:26:00en el lado del end de la pantalla
2:26:03va a ser de color rojo. La opción
2:26:06va a llamar a la función eliminar lista
2:26:08y el título va a ser eliminar.
2:26:12Antes de guardar tenemos que declarar
2:26:15estas dos, estos dos métodos. ¿Por qué?
2:26:17Porque si no va a arrojar error.
2:26:19Entonces venimos acá.
2:26:27lista íem, vamos a decir que es de tipo
2:26:32y editar y eliminar.
2:26:40Bien,
2:26:42ya tenemos nuestros métodos declarados y
2:26:43ahora sí podemos guardar el HTP.
2:26:48Compilo correctamente. Vamos a ver si
2:26:52funciona. Bueno, quedó raro.
2:26:56No tenía que borrar algún objeto. Vamos
2:26:58a ver acá cuál quedó.
2:27:02Tenemos item. Ah, okay.
2:27:06Ion item. E
2:27:08item
2:27:12para que dibuje el ítem correctamente.
2:27:15Acá no tenía que borrarlo sino mover el
2:27:18for, el eng for tenía que moverlo acá
2:27:20arriba.
2:27:23E
2:27:34y esto va acá.
2:27:39Ahora sí, iten options.
2:27:42Option.
2:27:45A ver ahora cómo quedó. Perfecto. Bien.
2:27:48Ven. Entonces, si lo corremos para la
2:27:50izquierda tiene el editar. Si lo
2:27:52corremos para la derecha tiene el
2:27:54eliminar.
2:27:55Sí.
2:27:57Y así cada uno de los botones de las
2:27:59listas.
2:28:04Bien.
2:28:06Vamos a verificar que esté llamando
2:28:08correctamente. Vamos a poner acá un
2:28:10console logitar lista.
2:28:14Y acá lo mismo, console lo loog eliminar
2:28:17lista
2:28:18que nos muestre editar en este caso,
2:28:21eliminar este caso y y qué objeto de la
2:28:23raíz se le está pasando.
2:28:26Vamos acá consola.
2:28:29Si editamos la lista un editar lista.
2:28:33Ven, título lista uno.
2:28:37Si queremos eliminar la dos, eliminar
2:28:40lista, lista dos. ¿Ven? La tres,
2:28:44eliminar lista lista tres y editar
2:28:48editar lista lista cuatro. Perfecto. Ya.
2:28:50Entonces, nuestros dos botones funcionan
2:28:53correctamente.
2:28:56Ya de esta forma
2:28:58e
2:29:01tenemos por lo menos en el HTML
2:29:05desarrollado para editar y eliminar la
2:29:07lista.
2:29:09Ahora lo que nos faltaría es trabajar
2:29:11con la lógica para o editar el nombre
2:29:17eliminarla de la ray.
2:29:21Bien,
2:29:24bueno, esto en G4, bueno, ya está
2:29:28importado.
2:29:31Esto ya lo hicimos. Editar lista,
2:29:32eliminar lista. Lo que hicimos recién,
2:29:36lo actualizamos acá. Bien.
2:29:40Bueno, ¿ahora qué vamos a hacer? Vamos a
2:29:42implementar modelos.
2:29:45¿Sí? ¿Por qué?
2:29:47Porque nosotros estamos trabajando con
2:29:49un ANI. La lista
2:29:52sí es de tipo Ani y nosotros queremos
2:29:55darle forma.
2:29:58Sí, en vez que sea de tipo ANI, B,
2:29:59nosotros ya sabemos qué forma va a tener
2:30:01nuestro objeto de lista.
2:30:03Entonces
2:30:06vamos a darle
2:30:08la forma correcta.
2:30:13Bien, acá en apparp
2:30:17llamar models.
2:30:20Sí, esto está en el documento que vimos
2:30:21hoy de las buenas prácticas, la
2:30:24estructura del proyecto
2:30:27models y dentro vamos a crear un archivo
2:30:30listamodel.ts
2:30:34lista.model.ts
2:30:37TS.
2:30:42Y acá lo que vamos a hacer es darle
2:30:47forma a nuestra lista.
2:30:51Formato el documento.
2:30:54Bien.
2:30:57ID va a ser de tipo number. Título tram
2:31:02creada en tipo date terminada en también
2:31:05de tipo date, pero le vamos a agregar el
2:31:07signo de pregunta porque puede ser
2:31:08undefined, ¿sí?
2:31:11o nula
2:31:13y cuando lo creamos va a ser nulo.
2:31:19Completada buuliano y actividades o
2:31:23actividad en realidad
2:31:27eh
2:31:30por ahora va a ser de tipo Ani también.
2:31:34Bien. ¿Y qué nos dice acá?
2:31:37nos está arrojando error porque debe
2:31:39inicializarse cada uno de los valores.
2:31:45Entonces para eso creamos el
2:31:47constructor.
2:31:50Como es una clase,
2:31:52va a tener un constructor.
2:32:02Bien.
2:32:03Y en este constructor,
2:32:06al igual que estamos haciendo en crear
2:32:08lista,
2:32:09solamente le asignamos el nombre de la
2:32:11lista.
2:32:13Entonces, ¿qué va a recibir? Y acá va a
2:32:15recibir el título, el constructor. ¿Para
2:32:18qué? Y para asignárselo a título.
2:32:22Sí, se lo asigna a la propiedad título y
2:32:25el resto lo hacemos igual. Creada en
2:32:28Newes, que es la fecha actual.
2:32:30completado, va a estar en false. Activas
2:32:32un array vacío porque recién se acaba de
2:32:34crear la lista y todavía no se dieron de
2:32:35al de actividades.
2:32:37Y el ID ahora sí lo que vamos a hacer
2:32:40acá le estamos jcodeando un cero.
2:32:44Vamos a hacer que tenga un identificador
2:32:45único.
2:32:47¿Qué vamos a hacer? Y vamos a obtener el
2:32:50tiempo actual, o sea, no solo la fecha,
2:32:52sino la hora con minutos y segundos. Y
2:32:56este va a ser un identificador único.
2:32:58¿Por qué? porque eso no se va a repetir
2:33:00nunca.
2:33:02Entonces, cada vez que se cree, se va a
2:33:04crear con un ID único.
2:33:08Sí, va a ser de tipo number, se va a
2:33:12crear como número
2:33:14y todo esto que vemos acá se va a crear
2:33:18acá.
2:33:20Bien, entonces ya tenemos nuestro modelo
2:33:22de datos.
2:33:26Ahora tenemos que implementarlo.
2:33:36Ah, bueno, acá nos pide primero e vamos
2:33:39a crear el modelo de datos para
2:33:41actividad.
2:33:43Lista model
2:33:45actividadmodel.ts.
2:33:48TS lo mismo.
2:33:57Descripción y completado. Va a ser de
2:34:00tipo stream y tipo buleano. Lo mismo.
2:34:06Ah, bueno, acá no recomendación que dice
2:34:08se actividad
2:34:11actividad
2:34:14constructor. Lo mismo actividad
2:34:18va a tener un título
2:34:21y en este caso va a ser una descripción
2:34:24y se le va a asignar
2:34:26a esta propiedad y completado va a estar
2:34:28en falso.
2:34:30Entonces guardamos y ahora volvemos al
2:34:33al modelo de lista y acá en vez de ser
2:34:35de tipo Ani va a ser de tipo actividad.
2:34:40Tenemos que hacer la importación del
2:34:42modelo
2:34:44actividad. ¿Ven? actividad model.
2:34:47Y ahora sí, esto no va a admitir
2:34:49cualquier cosa,
2:34:51sino que va a admitir solamente una
2:34:53descripción y un bulean. Esa va a ser la
2:34:55forma que va a tener una actividad y
2:34:58esta va a ser la forma que va a tener
2:35:00una lista,
2:35:03un objeto de tipo lista.
2:35:06Bien,
2:35:09ahora vamos a empezar a implementarlo.
2:35:13Ya lo importamos.
2:35:15Ya hicimos la actividad acá.
2:35:19Bien. Y ahora acá en lista service
2:35:23vamos a nuestro servicio y en vez de ser
2:35:25de tipo Ani, dijimos que va a ser de
2:35:27tipo lista.
2:35:31Se hace la importación desde models,
2:35:33lista model.
2:35:36Ahora entonces va a tener esta forma.
2:35:42Y ahora nos va a empezar a arrojar error
2:35:44acá.
2:35:46¿Por qué? Y porque a listas
2:35:50es de tipo lista, no le podemos hacer un
2:35:52push de un objeto X. Si bien tiene la
2:35:56misma forma, el código no sabe que tiene
2:35:58la misma forma.
2:36:01Eso lo sabemos nosotros.
2:36:03Entonces, no nos arroja error. No se
2:36:06puede asignar un argumento de tipo
2:36:08objeto.
2:36:10Esto es un objeto
2:36:13al parámetro de tipo lista. Acá no está
2:36:15diciendo es lista.
2:36:18Sí. Y bueno, acá en actividad dice que
2:36:21está haciendo una está ingresándole una
2:36:23ray vacío también.
2:36:26¿Ven? Hay dos errores.
2:36:34Actividad se declara aquí. Bien,
2:36:39ahora entonces tenemos que salvar esto
2:36:47con esta nueva implementación. Entonces,
2:36:49ya no será necesario definir [carraspeo]
2:36:51cada uno de los atributos al momento de
2:36:53crear el objeto de tipo lista, porque
2:36:55eso ya se está haciendo en el modelo.
2:37:01Para hacer una clase solo debemos crear
2:37:02una nueva instancia. Sí,
2:37:07esto va a desaparecer.
2:37:09Y acá tenemos que hacer new lista.
2:37:17Y el constructor de lista de la clase
2:37:19lista de nuestro modelo nos pide que le
2:37:21pasemos
2:37:23algo que sea de tipo stram, que nosotros
2:37:26sabemos que va a ser el título. Entonces
2:37:28acá tenemos el nombre de la lista y se
2:37:31lo pasamos directamente. Y ahora sí,
2:37:33nuestro objeto lista es de tipo lista. Y
2:37:37ven que ya no nos arroja más error. ¿Por
2:37:39qué? Porque al ray que es de tipo lista,
2:37:41le estamos insertando un objeto de tipo
2:37:44lista. Todo tiene la misma forma.
2:37:50¿Sí?
2:37:52Entonces,
2:37:54ahora sí
2:37:58esto está correcto.
2:38:02Bien,
2:38:03vemos acá. Actualizamos. Vamos a
2:38:08ven acá en application.
2:38:12Esto sigue creado de la misma forma.
2:38:14Vamos a agregar la lista cinco.
2:38:18¿Ven? Se agregó.
2:38:21Acá vemos que se agregó la lista cinco.
2:38:28Sí.
2:38:30A ver, acá
2:38:31tab una page.
2:38:37Bueno, ahora vamos a ver por qué se
2:38:40agregó, pero no la está mostrando.
2:38:43¿Ven que acá ahora vemos que esto tiene
2:38:45otra forma
2:38:48que está distinto.
2:38:55Si bien son los mismos atributos,
2:38:58acá lo vemos de diferente forma.
2:39:02Bien,
2:39:04pero se agregó.
2:39:07Vamos a seguir avanzando y viendo qué
2:39:09pasa.
2:39:11Ahora, ¿qué nos dice?
2:39:13Bueno, que acá definamos el objeto de
2:39:15tipo lista,
2:39:17tanto eh
2:39:20para lista íem,
2:39:23va a ser equipo lista, tenemos que hacer
2:39:26la importación
2:39:29y acá también de tipo lista.
2:39:32Y en nuestra
2:39:35nuestro eh array de listas también lo
2:39:37vamos a hacer de tipo lista.
2:39:40Sí, vamos a trabajar siempre con el
2:39:42mismo tipo de objeto.
2:39:46Entonces este esta ítem va a ser lista.
2:39:52Es este que recibimos acá.
2:39:56¿Ven? Y ahora como definimos nuestro
2:40:00array de tipo lista, ahora sí lo está
2:40:03mostrando.
2:40:04Todo tiene la misma forma.
2:40:09Bien,
2:40:15bueno, acá definimos.
2:40:17Ahora en el servicio vamos a crear una
2:40:20función que sea eliminar lista
2:40:24en el servicio.
2:40:26Los modelos ya lo cerramos y venimos al
2:40:28servicio.
2:40:31Obtener lista y acá vamos a crear
2:40:38bien el método
2:40:42eliminar. Listo. ¿Qué hace? recibe por
2:40:45parámetros un objeto de tipo lista. Está
2:40:49perfecto.
2:40:50Declara una variable que va a ser nuevo
2:40:53listado
2:40:55en el cual le va a asignar qué cosa.
2:40:59Accedemos a nuestro rabando
2:41:01en el servicio. Vamos a filtrar
2:41:05de esta ray. Vamos a hacer un filtro
2:41:08donde para cada objeto lista,
2:41:11para cada ítem de la Ray, lo va a
2:41:14recorrer y le va a decir filtrame donde
2:41:17el ID sea distinto
2:41:21al lista ID que recibí por parámetros.
2:41:26Entonces, todo esto que devuelve y es un
2:41:28filtro,
2:41:30va a devolver un listado completo
2:41:33donde el ID sea distinto
2:41:39del que de la lista que se recibe por
2:41:41parámetros. ¿Por qué? Y porque esta es
2:41:42la lista que queremos eliminar de
2:41:44nuestro array.
2:41:46Entonces, filtrame todo menos esta lista
2:41:49que recibí por acá. ¿Por qué? Porque la
2:41:50quiero eliminar.
2:41:53¿Sí me siguen?
2:42:03Bien, una vez que se filtró
2:42:07tenemos nuestro nuevo listado
2:42:09que repito, va a tener el mundo completo
2:42:13menos esta lista que se quitó, es la que
2:42:16queremos eliminar, ¿no?
2:42:19Y ahora, ¿qué hacemos?
2:42:22Asignamos nuestro nuevo listado a la Ray
2:42:26y después guardamos en el en el storage.
2:42:30Sí.
2:42:32Entonces se va a guardar en el storage
2:42:35el listado actualizado
2:42:38sin la lista que decidimos eliminar.
2:42:47Así de fácil es eliminar. Bien.
2:42:51Ahora, ¿qué tenemos que hacer? Bueno,
2:42:52esta eh nuevo método lo tenemos que
2:42:54invocar desde eliminar lista. Entonces,
2:42:58¿cómo hacemos?
2:43:00Lista service
2:43:03y llamamos a la función eliminar lista.
2:43:07¿Qué le pasamos por parámetro? Y la
2:43:09lista que queremos eliminar,
2:43:11que es la que estamos recibiendo acá.
2:43:14Sí.
2:43:18Y acá lo que vamos a hacer es agregar un
2:43:20presento que diga lista eliminada
2:43:22correctamente.
2:43:26Acá vamos a ver cuál lista eliminamos.
2:43:33Bien, vamos a probar con la lista cinco.
2:43:37Eliminamos.
2:43:39Lista eliminada correctamente.
2:43:42Bien. Acá hay otra cosa para hacer.
2:43:46¿Qué hicimos nosotros?
2:43:50La eliminamos de nuestro array del
2:43:54servicio. Pero nosotros, ¿qué habíamos
2:43:56dicho? lo habíamos puesto como privado
2:43:58para accederlo
2:44:00solo desde el servicio. Y en el Tab 1
2:44:03page.
2:44:04Nuestro propio Ray solo lo cargamos
2:44:09cuando inicializamos el tab, el
2:44:12constructor. Entonces acá deberíamos
2:44:15hacer lo mismo cada vez que hacemos
2:44:16alguna modificación.
2:44:18Por ejemplo, acá
2:44:23vamos a cargar nuevamente nuestro array
2:44:25local de tab 1
2:44:28con la lista actualizada.
2:44:34Sí, ahora ya se borró
2:44:38lista C.
2:44:42lo mismo.
2:44:48¿Por qué no se muestra?
2:44:53¿Por qué no vemos la lista cinco acá?
2:44:56¿Qué nos falta?
2:45:04¿Alguien se da cuenta que falta?
2:45:13Nosotros agregamos la lista. Agregar
2:45:15lista. Okay. Mostramos. Perfecto.
2:45:21Crear. Hizo el push, se guardó en el
2:45:24storage.
2:45:26Lista CCO se agregó, pero no la vemos en
2:45:29la pantalla.
2:45:33¿Qué falta acá?
2:45:42lo mismo, tenemos que actualizar nuestro
2:45:46array local.
2:45:48¿Ven la diferencia en trabajar
2:45:49directamente con el array del servicio
2:45:53que trabajar con un array local que es
2:45:55una copia?
2:45:57Y cada vez que hagamos algún cambio,
2:45:59tenemos que actualizar la copia.
2:46:03Sí.
2:46:06Entonces, una vez que se creó,
2:46:09actualizamos nuestro array local
2:46:12desde el servicio con la lista del
2:46:13servicio.
2:46:17Entonces, ahora sí agregamos
2:46:19lista seis
2:46:24y no centralizó.
2:46:30Lista service obtener. Vamos a poner acá
2:46:32un consol.
2:46:34Consol lista listas
2:46:40listas.
2:46:47Ahora ven que se volvió a cargar
2:46:50y acá sí lo actualizó.
2:46:53¿Por qué? Porque se cargó de nuevo.
2:46:57Pero nosotros una vez que la creamos
2:46:59acá sí se debería actualizar. ¿Por qué?
2:47:02Y porque a esta altura ya está
2:47:04actualizada la lista.
2:47:07Vamos a agar una nueva lista 7.
2:47:12Vamos a ver el cons
2:47:17lista. Lista 7.
2:47:20Acá tenemos un problema con el
2:47:21renderizado del objeto. Sí, es si
2:47:25recuerdan, era lo mismo que nos estaba
2:47:27pasando con la práctica que hicimos de
2:47:30JWT.
2:47:32que cuando cargábamos la pantalla
2:47:35hacíamos el llamado a la API y la API no
2:47:37se actualizaba. El la carga como era
2:47:40síncrona no se actualizaba.
2:47:48Bien, entonces
2:47:50en vez de trabajar
2:47:53con esto,
2:47:55vamos a
2:47:57trabajar, como decía la práctica. Sí.
2:48:01A veces ven que tiene ciertas
2:48:02limitaciones. En realidad se puede e
2:48:07se puede trabajar
2:48:09desde Angular
2:48:13vigilando que el objeto del servicio de
2:48:15listas eh
2:48:18si tiene cambios
2:48:20vigile esos cambios y lo actualice. Pero
2:48:23bueno, eso es un poquito más avanzado.
2:48:25Nosotros no lo vamos a ver. Ahora vamos
2:48:28a trabajar. Entonces, solamente quería
2:48:31que vean
2:48:32cómo se comportaba
2:48:34haciendo una copia del R.
2:48:39Eh, este era.
2:48:42Y ahora entonces dijimos que esto tiene
2:48:45que ser lista service en el en el HTML.
2:48:57Ah, porque acá está activado.
2:49:03Listo.
2:49:05Bien.
2:49:09Y nos falta probar el eliminar. Vamos a
2:49:12ver ahora si se va. ¿Ven? Como ahora se
2:49:15refresca automáticamente.
2:49:18Ven, se borra la lista.
2:49:23Lista seis,
2:49:29¿ven? Y no se renderizó, ¿no? Otra vez.
2:49:31Y ahora sí estamos trabajando
2:49:32directamente
2:49:35con el servicio y ya sabemos que la
2:49:38lista seis se cargó,
2:49:43¿ven? pero no se está renderizando
2:49:47y es lo mismo que les decía del de la
2:49:50práctica de JWT.
2:49:56A ver, eh,
2:50:00¿dónde está eso?
2:50:08Vamos a hacer una cosa. Vamos a abrir
2:50:10una nueva ventana porque eso ya lo
2:50:12solucioné.
2:50:14Me había olvidado mostrárselos. Vamos a
2:50:16abrir la práctica. JW
2:50:23D. Bien, acá está.
2:50:26A nosotros no se nos actualizaba el
2:50:29protective data, si que recuerden que
2:50:31era hacía el llamado el API Service
2:50:35y actualizaba acá
2:50:38el dato.
2:50:40Acá entonces se agrega un detector de
2:50:42cambios. Sí,
2:50:45que esta es una es una clase de Angular
2:50:50Cor.
2:50:53Esto, ¿por qué pasa? Por [carraspeo] la
2:50:55nueva e
2:50:57las nuevas versiones que estamos
2:50:59trabajando. Antes se actualizaba
2:51:02directamente, pero ahora ya no.
2:51:06Entonces,
2:51:08si nosotros agregamos, vamos a agregar
2:51:10esto
2:51:13en el tab, vamos a agregar la variable
2:51:16de clase,
2:51:20hacer la importación.
2:51:23Bien.
2:51:25Y ahora vamos a llamar al detector de
2:51:27cambios
2:51:30y este está acá.
2:51:36Bien. A ver, vamos a pensar cómo lo
2:51:38tenemos que usar.
2:51:43Tenemos que usarlo en agregar lista
2:51:46acá.
2:51:50Vamos a ver si acá lo agrega.
2:51:53Lista seis. Vamos a agregar lista siete.
2:51:58Bien, ven que ahora lo agregó.
2:52:02Entonces,
2:52:05aplicando
2:52:08si esta clase
2:52:10se detecta cuando hay algún cambio
2:52:13de algún otro componente.
2:52:16Vamos a probar a ver si eliminando.
2:52:20Bien, acá también lo quitó.
2:52:26A ver, en eliminar qué teníamos.
2:52:32Bueno, sí, lo llamamos directamente.
2:52:34Perfecto. Consol
2:52:37lista siete. Vamos a eliminar lista
2:52:39seis.
2:52:41Bien,
2:52:42vamos a agregar nuevamente lista seis.
2:52:47Bien. Y ahora ya lo está agregando.
2:52:52A ver si esto
2:52:55no. Esto ya lo cerramos.
2:52:58E
2:53:00vamos a probar
2:53:03si este detector de cambios
2:53:08lo agregamos en el constructor. ¿Qué
2:53:10pasa?
2:53:16Ah, no, mira, no se puede.
2:53:24Una page. No, no deja agregarlo.
2:53:33A ver si
2:53:36vamos a eliminar esta lista.
2:53:44Problema es cuando agregas, cuando
2:53:45eliminas lo
2:53:49hace. ¿Qué diferencia tiene? A ver, este
2:53:51es asíncrono
2:53:55push.
2:53:59Es lo mismo.
2:54:04Bueno, vamos a dejar el detector
2:54:05entonces cuando agregamos la lista.
2:54:10Bien. A ver, ahora teníamos
2:54:15lista seis,
2:54:19lista si
2:54:22le Ahora sí la muestro. Eliminamos la
2:54:25quit. Perfecto. Bien.
2:54:29Vamos a borrar la lista uno.
2:54:33Bien. ¿Por qué se borraron la lista 1,
2:54:372, 3 y 4? ¿Alguien
2:54:40se dio cuenta de eso?
2:54:43Porque eran local
2:54:48y eran dos listas separadas y te
2:54:50eliminaba la habíamos dicho que
2:54:52eliminaba la que no te interesaba y te
2:54:54dejaba
2:54:56la que sí.
2:54:58Y claro, nosotros yo recién elegí la
2:55:00uno, lista uno, ¿por qué borró la dos,
2:55:02tres y cu? Si bien sí estaba en el
2:55:05anterior,
2:55:10o sea, tenía el formato anterior, tenía
2:55:12la misma forma, tenía un ID, tenía un
2:55:14título creada en
2:55:18¿Qué es lo que tenían esas cuatro listas
2:55:23que la estas nuevas creadas tienen
2:55:26diferente? A ver quién se da cuenta.
2:55:41Acá era como la creábamos antes.
2:55:43Tenían ID y todas tienen ID cero.
2:55:46Exactamente.
2:55:48Esas cuatro tenían el ID cero.
2:55:51Como tenían el mismo ID, el filtro, ¿qué
2:55:55hizo? la sacó a las 4
2:55:58y solamente dejó las listas que tenían
2:56:01un ID distinto a cero.
2:56:04Entonces, nosotros cuando borramos la
2:56:05seis se borraba.
2:56:08Cuando agregamos varias listas distintas
2:56:10que fueron las últimas que agregamos
2:56:14ya a partir de estas listas,
2:56:17por eso yo siempre borraba las últimas
2:56:20para dejar las que tenían. ¿Ven? ID.
2:56:22Miren el ID que tiene
2:56:25ID. Ven.
2:56:30Entonces, como dijimos, le va dando un
2:56:32formato único al ID mediante la fecha y
2:56:36la hora. Pero cuando creamos esas
2:56:39anteriores, nosotros habemos jarcodeado
2:56:41el ID a cero. Entonces, las cuatro
2:56:43tenían el mismo ID.
2:56:46Entonces, ya sabemos que ya lo
2:56:48comprobado igual, pero bueno, acá nos
2:56:51queda comprobado que el ID,
2:56:54el filtro está funcionando correctamente
2:56:56y estuvo bien que haya borrado esas
2:56:58cuatro listas.
2:57:01Bien, ¿cuánto nos falta? A ver,
2:57:05entonces nuestra función de eliminar ya
2:57:07está ya está funcionando correctamente.
2:57:14Eliminar. Ya la llamamos.
2:57:21Eliminar console log. Esto ya está
2:57:23perfecto. Borramos el conso log.
2:57:25Presentóas. Vista eliminada.
2:57:30Y ahora nos queda el de editar. A ver,
2:57:32queda el editar. Perfecto. Terminamos
2:57:34con este y nos quedaría lista la primer
2:57:37parte.
2:57:39Bien,
2:57:40a diferencia de eh de eliminar
2:57:45para editar una lista,
2:57:52vamos a primero a crear la función en el
2:57:54servicio.
2:57:57Lo guardamos.
2:58:08dar formato.
2:58:11E para editar, ¿qué vamos a tener que
2:58:13hacer? Buscar esa lista que queremos
2:58:17editar. Sí, en vez de usar filtro, ahora
2:58:20vamos a usar find dentro del servicio,
2:58:25nuestro array de listas vamos a filtrar
2:58:28únicamente la lista
2:58:31donde su ID sea igual de la lista que
2:58:34recibimos por parámetro. ¿Por qué?
2:58:37Porque acá abajo queremos editar una
2:58:38sola lista.
2:58:40Entonces se va a asignar
2:58:43a nuestra variable lista editar la lista
2:58:46que se haya que se tenga que editar.
2:58:50Bien. Bueno, Fine devuelve el primer
2:58:53valor que encuentra.
2:58:55Sí,
2:58:58si hay varios va a devolverse solamente
2:59:00uno.
2:59:03¿Qué hacemos acá? validamos en si
2:59:05encontró algo. Sí, pues si no no podemos
2:59:06editar algo que sea nulo. Entonces,
2:59:10variamos lista editar. ¿Tiene algo
2:59:12adentro? Si tiene algo adentro. ¿Ven?
2:59:14Acá dice puede ser lista o puede ser
2:59:17undefined. Undefined va a ser cuando no
2:59:19encuentre nada. Entonces esto pregunta,
2:59:24¿tiene un objeto lista dentro? Sí.
2:59:28O si queremos hacer de otra forma es
2:59:30lista y tarés distinto ante Fined. Sí.
2:59:33Eso es lo que se está validando en el
2:59:34if.
2:59:37Si tiene algo adentro, quiere decir que
2:59:39encontró un objeto. Si no encontró,
2:59:41entonces a este objeto que encontró al
2:59:43atributo título, le vamos a decir que su
2:59:46valor va a ser el título que haya
2:59:50recibido en la lista por parámetro.
2:59:53le va a asignar el valor de título nuevo
2:59:58porque acá vamos a mandar la lista nueva
3:00:02con un título nuevo, o sea, va a ser la
3:00:05lista pero con el título editado, mejor
3:00:06dicho.
3:00:09¿Sí?
3:00:10Entonces, va a buscar ese ID de la
3:00:12lista. Si lo encuentra en el array, la
3:00:15signa se valida
3:00:18si esto tiene algo adentro. le actualiza
3:00:22el título con el nuevo que le pasemos
3:00:25por parámetro.
3:00:26Una vez que se actualizó, se guarda en
3:00:29el local storage.
3:00:35Sí,
3:00:41bien. Acá al usar fine, acá tenía que
3:00:45ver si lo mismo. Acá estamos filtrando
3:00:49porque acá
3:00:51al usar fine, ¿qué estamos haciendo? una
3:00:52copia exacta del del objeto encontrado
3:00:56y esa copia la estamos guardando en
3:00:58lista editar. Le agregamos el nuevo
3:01:00título y guardamos en local storage.
3:01:01¿Ven que acá diferencia?
3:01:05Sí, asignamos primero el nuevo listado a
3:01:09nuestro array de listas
3:01:12y después guardamos. Tendríamos que ver
3:01:14si esto funciona de la misma manera, si
3:01:16el filter y el fine funcionan de la
3:01:19misma manera. Para comprobarlo,
3:01:21comentamos la parte donde se iguala o
3:01:24donde se asigna el nuevo listado en
3:01:26nuestro rey de listas. Entonces, vamos a
3:01:28comprobar esto. Si borramos,
3:01:31¿ven? No funcionan de la misma forma. No
3:01:34se quitó la lista siete de la
3:01:38s.
3:01:40Entonces, el filter y el find no
3:01:42funcionan de la misma forma.
3:01:47Bien.
3:01:49Una vez que asignamos el título nuevo,
3:01:51guardamos el local storage, que
3:01:53inclusive esto lo podríamos hacer acá
3:01:57dentro.
3:01:59¿Por qué? Porque si no encontró nada, no
3:02:00tenemos nada que guardar porque no se
3:02:02editó nada.
3:02:07Sí,
3:02:09vamos a probarlo ahí. Bien.
3:02:12Bueno, esta es la lógica. Ahora nos
3:02:14falta implementarla. ¿En dónde? En
3:02:17editar lista.
3:02:18Pero como dijimos
3:02:21ahora, a diferencia de eliminar, ed
3:02:24estamos editando. ¿Y qué estamos
3:02:26editando? Y bueno, queremos agregar un
3:02:28nuevo título.
3:02:30Y para agregar un nuevo título, ¿qué
3:02:32necesitamos? Y necesitamos
3:02:36un alert controller,
3:02:39pero va a ser de edición.
3:02:46Entonces, en el Tab uno page vamos a
3:02:48agregar nuestra función
3:02:51editar lista.
3:02:58Acá nos falta un pedacito más
3:03:01y ahora vemos qué hace.
3:03:10Bien,
3:03:22bien. Le cambié el nombre. ¿Por qué?
3:03:24porque ya teníamos eh un método que se
3:03:26llamaba editar, editar lista. Entonces,
3:03:28a este le vamos a editar a poner editar
3:03:30lista.
3:03:32¿Qué es lo que va a hacer?
3:03:35Va a recibir por parámetros un objeto de
3:03:37tipo lista.
3:03:39Va a crear un nuevo alert controller.
3:03:42Sí, lo mismo que antes, pero en vez de
3:03:45llamarse crear, en este caso va a ser
3:03:47editar lista. ¿Por qué? Porque queremos
3:03:50editar una lista que ya está creada.
3:03:54va a tener un input. ¿Para qué? Para que
3:03:56el usuario pueda
3:03:58asignar ese nuevo título de la lista.
3:04:02Va a ser de tipo texto. El nombre de la
3:04:05variable también va a ser título.
3:04:08Va a tener un playholder donde va a
3:04:09decir ingresar el nuevo nombre de la
3:04:12lista
3:04:14y va a tener un valor en este caso va a
3:04:16tener value donde se va a asignar el
3:04:19título actual de la lista que lo
3:04:21asignamos. en base a la lista que
3:04:24recibimos por parámetro.
3:04:26En este caso, el placeholder no se va a
3:04:27ver. ¿Por qué? Porque va a tener un un
3:04:30valor a no ser que ese valor se borre
3:04:32entero.
3:04:34Bien, ¿qué más? Bueno, va a tener
3:04:36botones cancel igual que antes y editar
3:04:41mismo. Handler data para acceder al
3:04:44título.
3:04:46Como decimos en crear.
3:04:50¿Qué vamos a hacer? Vamos a validarlo
3:04:51nuevamente. Sí,
3:04:54validar input para ver que el nuevo dato
3:04:56ingresado
3:04:58sea correcto. Estamos usando la el mismo
3:05:00método que antes, si validar input. Por
3:05:02eso también le pusimos
3:05:05el mismo nombre a la variable, porque si
3:05:07acá nosotros le poníamos título editado,
3:05:11esto iba a romper porque no lo iba a
3:05:12encontrar.
3:05:17Si es válido el nuevo título,
3:05:23eh, se lo asignamos a la lista que
3:05:25recibimos por parámetro, es la lista que
3:05:27nosotros queremos editar,
3:05:30y a título le cargamos lo que tiene el
3:05:33input, data puntítulo. Sí,
3:05:37es lo que ya validamos.
3:05:42Llamamos al servicio, editar lista, que
3:05:44es el que creamos recién, que recibe una
3:05:46lista por parámetros, la busca, la
3:05:48valida y le asigna nuevo título.
3:05:53Lo mismo.
3:05:55Y acá, bueno, lista editada
3:05:57correctamente y nos falta un parámetro.
3:06:06Sí. Y después cuando ya creamos el
3:06:09objeto lo tenemos que mostrar como
3:06:12antes, alerta present. ¿Para qué? Y para
3:06:15mostrar eh nuestro nuevo alerta de
3:06:19edición.
3:06:22Y ahora lo que tenemos que hacer es
3:06:24llamar
3:06:27sí
3:06:29a nuestro nuevo editar lista a desde
3:06:32dónde? Desde la función editar lista que
3:06:35es la que se llama
3:06:38desde el HTML. Si ven que no la llamamos
3:06:40directamente,
3:06:43vamos primero a esta lista.
3:06:47Entonces llamamos dis punto editor lista
3:06:505. ¿Y qué le vamos a pasar? Y el el
3:06:53lista item
3:06:55que nos está pasando el HTML.
3:07:02Y ahora sí va a ser toda la lógica.
3:07:05Vamos a guardar.
3:07:11Y acá vamos a editar esta lista. Bien,
3:07:14¿ven? Editar lista. Ven acá nos dice
3:07:16lista cinco, que es el nombre que tiene
3:07:18actualmente.
3:07:20Si borramos ingresar nuevo nombre de la
3:07:22lista. Lista uno. Vamos a ponerle
3:07:27editar. Lista editada correctamente.
3:07:29¿Ven? Acá cambió el nombre. Lista uno.
3:07:34Pero, ¿qué nos pasó? nos pasó lo mismo
3:07:36que antes
3:07:41que no detectó el cambio. Entonces, para
3:07:45estos casos de edición,
3:07:47una vez que hicimos el llamado
3:07:51y antes de mostrar el cartel, le decimos
3:07:54que detecte cambios.
3:07:57Ahora vamos a ver si funciona. Editar la
3:08:00lista 7, le ponemos lista dos.
3:08:04Editar lista. Lista editada
3:08:05correctamente. ¿Ven? Y ahí hice lista
3:08:08dos. El array dice lista dos.
3:08:13Si le ponemos
3:08:16borramos y queremos editar debe ingresar
3:08:19un valor. Ven, nos arroja el error
3:08:24y está funcionando perfecto. Listadita
3:08:27correctamente.
3:08:31Bien. ¿Alguna duda hasta acá?
3:08:44Y no, no se puede eliminar el editor y
3:08:47quedarte con este
3:08:50llamar directamente
3:08:52al al controller.
3:08:55Claro, porque al final el otro lo único
3:08:57que te hace es un log, un conso log.
3:09:00Es lo mismo. Sí, sí, porque para no
3:09:04tener una función que llame una misma
3:09:05función.
3:09:06Claro. Al igual que llamamos al agregar
3:09:08lista, podemos llamar al editar lista 5.
3:09:12Sí, si quieren hacemos así
3:09:20porque el parámetro es el mismo y y toda
3:09:23la bola.
3:09:25Editar
3:09:26bien.
3:09:28Editar.
3:09:30Sí, es lo mismo.
3:09:35Entonces ahí ya nos queda la lógica de
3:09:38la edición.
3:09:44Bien, ¿alguna duda más?
3:09:52Les voy a pasar
3:09:54eh el nombre de esta librería. Puede ser
3:09:58que el eliminar te funcione porque no es
3:10:00una función de assignia weight, sino que
3:10:02de una por eso se actualiza,
3:10:05porque las otras son de asing y de
3:10:07weite.
3:10:08Exactamente. Es que era lo que me
3:10:10pasaba.
3:10:12Claro, por eso necesitabas el cha
3:10:14detector.
3:10:14Cuando Exactamente en el otro ejercicio,
3:10:17ah, lo cerré cuando hacíamos el llamado
3:10:19la API. ¿Por qué? Y porque es un llamado
3:10:21asíncrono también.
3:10:23Claro.
3:10:24Entonces, en los llamados asíncronos,
3:10:26vámonos ahí. los cambios. ¿Cómo
3:10:29vamos? Cuando hagamos algún llamado
3:10:31síncrono nosotros vamos a necesitar este
3:10:33componente.
3:10:34Exactamente.
3:10:36Sí.
3:10:38Entonces, como son llamados asíncronos,
3:10:40no detecta directamente los cambios. Por
3:10:42eso es que hay que usar esta nueva
3:10:44librería para detectarlos.
3:10:49Ahí se las pasé. Les voy a pasar también
3:10:52el llamado
3:10:55para los llamados.
3:10:57Se los paso acá por el chat. Si quieren
3:10:59cópienlo.
3:11:01Para llamados
3:11:03asíncronos.
3:11:09Eh, como les decía, esto empezó a pasar
3:11:12con las nuevas versiones.
3:11:14Sí, antes eh no estaba no pasaba
3:11:18después de actualizar la la práctica.
3:11:24para que les quede bien, pero bueno,
3:11:26ténganlo ahí y sepan que se agrega en
3:11:29los llamados asíncos.
3:11:32Yo creo que todos van a tener las nuevas
3:11:34versiones.
3:11:36Y bueno, a mí me empezó a pasar ahora,
3:11:37¿por qué? porque por el tema esta de la
3:11:39virtual que tenía eh se reiniciaba,
3:11:43entonces me creé una nueva y tuve que
3:11:45instalar todo de cero. Ahora tengo todas
3:11:46las nuevas las últimas versiones de todo
3:11:50e de node, de de Ty Script,
3:11:56de Ionic, así que tiene toda la última
3:11:59versión.
3:12:01Bien, ¿alguna duda más?
3:12:09Eh, salvo por esto que fue el único
3:12:11cambio y el servicio que
3:12:16ahora esto sí se se carga así. Esto
3:12:20bueno lo hice de la manera antigua.
3:12:21Tendría que ver con el nuevo decorador
3:12:24eh cómo queda.
3:12:28Pero bueno, en la práctica está todo,
3:12:30así que pueden avanzar. Lo único que no
3:12:33estaba era el este llamado el chang
3:12:35detector.
3:12:37Así que esto ya lo tienen también.
3:12:40Faltaría que decoremos si comentemos las
3:12:42funciones nuevas no más.
3:12:44Eh, sí, acá todas estas funciones que yo
3:12:47creé no están comentadas.
3:12:51Sí, así que esto después agréguenlo a
3:12:52ustedes.
3:12:56Todos se lo pueden agregar así
3:12:59y lo va a cargar. Otra
3:13:04tab
3:13:07y lo cargo.
3:13:09Esto tiene que estar en el proyecto.
3:13:11Ustedes no van a tener que agregar en
3:13:12todos lados. Ahora lo voy a agregar así
3:13:13no más
3:13:18para que quede
3:13:23constructor, ¿no?
3:13:26Bien.
3:13:28Bueno, entonces esta es la primer parte
3:13:30de la práctica, ya está toda finalizada
3:13:33y después la clase que viene vamos a
3:13:35seguir con esta práctica que bueno,
3:13:38faltan varias cosas, trabajar con
3:13:41actividades,
3:13:43eh, y trabajar con el resto de los tabs
3:13:47que todavía no trabajamos con con ellos.
3:13:52Así que bueno, si no hay más dudas,
3:13:55practiquen, hagan esta nueva práctica.
3:13:58Sí, así la semana que viene, si hay
3:14:01dudas las vemos y si no seguimos con lo
3:14:05que queda de la de la segunda parte.
3:14:09Dale.
3:14:11Bueno,
3:14:13los libero entonces que tengan buenas
3:14:14noches, buena semana. Sí, Fabio.
3:14:22Levanté sin querer, perdón.
3:14:23Ah, okay. No hay problema. Buena semana,
3:14:25buenas noches y nos vemos el martes que
3:14:28viene.