Vue JS 3: API de composición (con Pinia y Vite) | Danny Connell | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Vue JS 3: API de composición (con Pinia y Vite)

teacher avatar Danny Connell, Teacher & Indie App Developer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      ¡Hola!

      1:39

    • 2.

      Introducción [Módulo 1]

      8:02

    • 3.

      ¿Qué es la API de composición?

      5:36

    • 4.

      Configuración de editores y software

      7:44

    • 5.

      Devtools

      2:07

    • 6.

      Vue 3 Docs e instalar Node.js

      1:05

    • 7.

      Crear un proyecto Vue

      2:38

    • 8.

      Configuración de proyectos

      3:43

    • 9.

      API de opciones vs API de composición

      1:34

    • 10.

      Opciones API - datos y métodos

      1:59

    • 11.

      Conviértela a API de composición

      1:27

    • 12.

      API de composición - datos y métodos

      3:20

    • 13.

      Configuración de guiones: ¡una manera más fácil!

      2:51

    • 14.

      Refs [Módulo 4]

      1:27

    • 15.

      Vinculación de datos bidireccionales

      1:31

    • 16.

      Objetos reactivos

      2:59

    • 17.

      Datos no reactivos

      1:20

    • 18.

      Métodos [Módulo 5]

      3:40

    • 19.

      Propiedades computadas

      4:14

    • 20.

      Una nota sobre los filtros

      1:32

    • 21.

      Reloj

      3:41

    • 22.

      Ganchos de ciclo de vida montados [Módulo 6]

      4:18

    • 23.

      Ganchos activados

      2:00

    • 24.

      Ganchos actualizados

      1:31

    • 25.

      Multiple múltiples!

      2:12

    • 26.

      Directivas personalizadas locales

      3:48

    • 27.

      Directivas personalizadas

      2:50

    • 28.

      Router Vue - $route - Parte 1 [Módulo 8]

      3:49

    • 29.

      $route - Parte 2

      3:21

    • 30.

      useRoute

      2:40

    • 31.

      useRouter

      3:29

    • 32.

      Listas (v-for) [Módulo 9]

      2:53

    • 33.

      Refs de plantilla

      3:03

    • 34.

      nextTick

      1:51

    • 35.

      Teleport parte 1

      4:23

    • 36.

      Teleport parte 2

      3:21

    • 37.

      Componentes infantiles

      2:51

    • 38.

      Cómo arreglar puntos de vista

      1:35

    • 39.

      Ranuras

      3:34

    • 40.

      Accesorios

      3:51

    • 41.

      Emites

      3:52

    • 42.

      modelValue

      2:24

    • 43.

      update:modelValue

      2:38

    • 44.

      Componentes dinámicos - parte 1

      2:46

    • 45.

      Componentes dinámicos - parte 2

      2:19

    • 46.

      Proporcionar e inyectar - Parte 1

      4:10

    • 47.

      Proporcionar e inyectar - Parte 2

      3:13

    • 48.

      ¿Qué es un composable? [Módulo 11]

      4:54

    • 49.

      Crear un compuesto

      2:39

    • 50.

      Usa nuestro composable

      3:26

    • 51.

      Reutilizar nuestro composable

      4:15

    • 52.

      Añade composición de VueUse

      3:27

    • 53.

      ¿Qué es la gestión estatal? [Módulo 12]

      5:34

    • 54.

      Estado composable vs Vuex

      5:02

    • 55.

      Pinia - Estado - Parte 1

      2:41

    • 56.

      Pinia - Estado - Parte 2

      5:41

    • 57.

      Pinia

      3:40

    • 58.

      Pinia - Getters

      2:42

    • 59.

      Pinia - Usa nuestra tienda en cualquier lugar

      2:22

    • 60.

      Proyecto de clase: notas [Módulo 13]

      2:06

    • 61.

      Crear proyecto

      2:14

    • 62.

      Router - instalación y configuración

      3:02

    • 63.

      Router - Añade algunas rutas

      4:00

    • 64.

      Agregar routerView y navegación

      1:50

    • 65.

      Router - Cómo atar

      2:19

    • 66.

      Bulma y diseño - instalar Bulma [Módulo 14]

      3:09

    • 67.

      Barra naval

      2:46

    • 68.

      Barra naval

      2:53

    • 69.

      Barra naval - diseño y menú

      5:05

    • 70.

      Páginas (diseño)

      2:04

    • 71.

      Notas (diseño)

      1:51

    • 72.

      Cómo agregar un formulario de nota

      2:30

    • 73.

      Array de notas (Ref) [Módulo 15]

      2:37

    • 74.

      Método de agregar notas

      8:59

    • 75.

      Componente para niños

      2:32

    • 76.

      Aportes (Nota)

      1:34

    • 77.

      Computado (longitud de notas)

      5:45

    • 78.

      Eliminar nota (emitir)

      6:24

    • 79.

      Pinia - configuración y estado [Módulo 16]

      4:20

    • 80.

      Usa nuestra tienda

      3:40

    • 81.

      Acción - agregar nota

      3:47

    • 82.

      Acción (con parámetros

      2:38

    • 83.

      Acción - suprimir nota

      5:15

    • 84.

      Editar página y ruta

      4:38

    • 85.

      Componente reutilizable

      3:57

    • 86.

      Conecta con modelValue

      5:32

    • 87.

      Cómo arreglar el enfoque

      5:04

    • 88.

      Adhesivos de color, marcadores de posición y etiquetas

      10:31

    • 89.

      Getter - Obtén contenido de notas

      5:35

    • 90.

      Cómo obtener contenido de notas

      3:09

    • 91.

      Acción - nota de actualización

      6:24

    • 92.

      useRouter - redirigir a la página de notas

      1:20

    • 93.

      Más página de entradas y estadísticas

      7:33

    • 94.

      Directiva - enfoque automático

      2:07

    • 95.

      Directiva mundial

      2:57

    • 96.

      Observa el número de personajes (reloj)

      2:10

    • 97.

      Composable - useWatchCharacters

      4:24

    • 98.

      Composable - múltiples parámetros

      2:48

    • 99.

      Haz clic en composición exterior (VueUse, refs de plantillas)

      6:10

    • 100.

      Eliminar un diseño modal (objetos reactivos)

      7:19

    • 101.

      Oculta el modal de eliminación (modelValue y update: modelValue)

      5:21

    • 102.

      Eliminar modal: haz clic en el exterior

      3:34

    • 103.

      Eliminar modal - control de teclado (ganchos de ciclo de vida)

      6:18

    • 104.

      Cómo eliminar el modo

      4:57

    • 105.

      Roundup

      2:22

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

310

Estudiantes

1

Proyectos

Acerca de esta clase

Si ya estás familiarizado con la API de Vue 2 y Options entonces este curso te enseñará todo lo que necesitas saber para cambiar a (y comenzar con él) y la nueva y increíble API de composición.

Mi nombre es Danny, soy un desarrollador de aplicaciones de Indie y creador de Fudget, la aplicación de finanzas personales con mayor calificación para iOS, Android, Mac y Windows.

Y he pasado los últimos 12 meses creando Fudget 2, que está construido en la API de Composición.

En este curso empezarás a aprender las diferencias clave entre la API de opciones y la API de composición creando una aplicación sencilla de opciones y convirtiéndolo a la API de composición.

Luego dominarás todos los conceptos básicos:

  • Datos reactivos con objetos reactivos y reflejos

  • Métodos, propiedades computarizadas y observadores

  • Ganchos de ciclo de vida

  • Directivas

  • Router

  • Componentes infantiles: las nuevas formas de manipular accesorios, emits y modelo

  • Componentes dinámicos

  • Composables: cómo crearlos desde cero y cómo importarlos desde la biblioteca de VueUse

  • Y aprenderás Administración estatal con Pinia, el increíble sucesor de Vuex

Después de aprender lo básico, vas a crear una aplicación en el mundo real llamada Noteballs desde cero: que tiene capacidades completas de CRUD, usa Pinia para administración estatal y demuestra el uso en el mundo real de todos los conceptos básicos que aprendiste anteriormente.

Después de este curso, podrás crear tus propias aplicaciones de Vue 3 basadas completamente en la API de composición desde cero.

Este curso requiere una comprensión básica de la API de Vue 2 y las opciones, HTML, CSS y JavaScript.

Por favor, echa un vistazo a los videos de vista previa y espero verte en el curso.

Código fuente terminado de videos en esta clase:

Conoce a tu profesor(a)

Teacher Profile Image

Danny Connell

Teacher & Indie App Developer

Profesor(a)

I spent 7 years working for various companies in the UK as a Web Developer (both front- and back-end) becoming highly skilled in HTML, CSS, JavaScript, jQuery, PHP and many more.

After becoming more interested in apps, I worked for 2 years as a Hybrid App Developer, creating cross-platform apps for the charity sector using technologies including Angular, Ionic, Vue.js and more.

I created my own successful app called Fudget (for iOS, Android, Mac & Windows) which is the highest user-rated personal finance app on iOS with over 1.5 million downloads. This eventually enabled me to leave my job and become a full-time Indie App Developer, working on my own apps.

I have a young but successful YouTube channel where I also share coding tutorials.

I'm super excited to ... Ver perfil completo

Habilidades relacionadas

Desarrollo Desarrollo web
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. ¡Hola!: Si ya estás familiarizado con U2 y la API de opciones, y este curso te enseñará todo lo que necesitas saber para cambiar y comenzar con V3 y la increíble nueva API de composición. Mi nombre es Danny, estoy en la India desarrollador de aplicaciones y creo un presupuesto, las finanzas personales más valoradas hasta para iOS, Android, Mac o Windows. Y he pasado los últimos 12 meses creando 42, que se basa en U3 y la API de composición en este curso, comenzarás aprendiendo las diferencias clave en la API de Opciones y la API de composición al crear una aplicación API de opciones simples y convertirla a la API de composición. Luego dominará todos los conceptos básicos, incluidos los datos reactivos con balsas y objetos reactivos, métodos, propiedades y relojes calculados, ganchos del ciclo de vida, directivas, router de vista, componentes hijo, incluidas las nuevas formas. Por último, los cultivos emiten y valores modales componentes dinámicos componibles cómo crearlos desde cero y cómo importarlos desde la vista usan biblioteca y aprenderás administración estatal usando centavo en el increíble sucesor para ver x después de aprender estos básicos. Así que vas a crear una aplicación del mundo real llamada bolas de notas desde cero, que tiene capacidades completas de multitud. Utiliza penique o falso manejo estatal y demuestra noticias del mundo real de todos los conceptos básicos que aprendiste antes. Después de este curso, podrás crear tus propias tres nuevas aplicaciones basadas enteramente en la API de composición, completamente desde cero. Este curso requiere un entendimiento básico si sintoniza las opciones API, HTML, CSS, y JavaScript, por favor echa un vistazo a los videos de vista previa y espero verte en el curso. 2. Introducción [Module 1]: Hola ahí. Mi nombre es Danny Cano. Bienvenido a este curso, Vue.js tres composición API con centavo en VT. Si ya estás familiarizado con V2 y la API de opciones. Y este curso te enseñará todo lo que necesitas saber para cambiar y comenzar con B3 y la API de composición. Esto es más o menos lo que vamos a hacer en este curso. En el Módulo uno, les voy a presentar el curso. Explicar cuál es la API de composición. Muéstrale mi configuración del editor, que es código VS, incluyendo la instalación de todas las extensiones que voy a usar. Voy a instalar herramientas Vue dev para ayudarnos con nuestro desarrollo. En el Módulo dos, te vamos a presentar al sitio de documentación V3. Vamos a instalar NodeJS para que podamos empezar a crear apps V3. Y vamos a crear un proyecto de vista utilizando la última herramienta de compilación con VTE. Entonces vamos a poner ese proyecto listo para empecemos a aprender lo básico. En el módulo tres, vamos a ver las diferencias clave entre la API de opciones y la API de composición. Vamos a crear una aplicación API de opciones muy sencilla para recordarnos cómo funcionó la API de opciones. Entonces vamos a convertir esa aplicación API de opciones simples para usar la API de composición en su lugar. Esto nos dará una forma realmente rápida y sencilla de ver las diferencias clave entre los dos enfoques. Entonces vamos a buscar las diferencias entre los dos patrones diferentes que podemos usar con la API de composición, que es el patrón de función de configuración más antiguo y la configuración de script más nueva y superior patrón. En el módulo cuatro, vamos a aprender todo sobre los datos. Vamos a aprender sobre datos reactivos incluyendo refs, objetos reactivos. Vamos a aprender sobre el enlace bidireccional y vamos a ver los datos no reactivos. El módulo cinco se trata de métodos. Vamos a aprender sobre métodos, propiedades computadas y relojes. En el módulo seis, vamos a aprender todo sobre cómo usamos ganchos de ciclo de vida de manera diferente en la API de composición, incluyendo ganchos derretidos, ganchos activados, halcones actualizados, y cómo podemos usar múltiples ganchos de el mismo tipo dentro de un solo componente. En el módulo siete, vamos a aprender todo sobre las directivas en la API de composición. Vamos a aprender a crear directivas personalizadas locales, que son locales a un componente individual. Entonces vamos a ver cómo podemos crear directivas globales de clientes, que pueden ser utilizadas por cualquiera de los componentes de nuestra app. En el módulo ocho, aprenderemos todo sobre cómo usamos Router Vue de manera diferente en la API de composición, incluyendo cómo podemos usar las rutas del dólar, lo objeta para mostrar información de nuestro router en nuestro y las nuevas rutas estadounidenses y utilizan router composable. En el módulo nueve, vamos a aprender sobre listas usando v4, el asombroso nuevo componente de teletransporte. Vamos a aprender a usar refs de plantilla para que podamos acceder a elementos que están en nuestro componente y luego hacer algo con ese elemento cuando nuestro componente se haya cargado, como enfocar una entrada, También vamos a aprender a usar next tick usando la API de composición. Módulo diez, vamos a aprender todo sobre los componentes infantiles, incluyendo cómo podemos pasar contenido a un componente hijo usando ranuras. Puede pasar datos a componentes hijo usando apoyos. Cómo podemos emitir un evento de cliente de un componente hijo a un componente padre usando emite, cómo podemos obtener un componente hijo para modificar una propiedad de datos en su componente padre usando valor modal y actualizar el valor del modelo, vamos a ver los componentes dinámicos que nos permiten cambiar el componente que se está utilizando en una parte particular de nuestra app. Y vamos a ver cómo podemos proporcionar datos de un componente padre a todos sus componentes descendientes usando provide inyecta. Módulo 11, aprenderás todo sobre composable, que es una de las nuevas características más emocionantes con B3, vamos a responder primero la pregunta, ¿qué es una composable? Entonces vamos a crear una composable personalizada que nos permitirá compartir datos reactivos, métodos no relacionados a través de nuestros componentes. Entonces vamos a instalar y configurar una composable desde la biblioteca view también. En el módulo 12, vamos a aprender todo sobre la gestión estatal usando Pena, que actualmente es el estándar oro para gestión estatal en las apps API de composición v3, vamos a responder primero a la pregunta, ¿qué es la gestión estatal? Vamos a ver tres enfoques diferentes a la gestión estatal en una vista tres arriba usando cualquiera composable unos centavos. Y vamos a ver las diferencias entre estos. Entonces vamos a aprender todo sobre el estado con Penn. Estado es donde almacenamos todas nuestras propiedades de datos, una tienda de videos. Ahora vamos a aprender todo sobre acciones con Penny. Y las acciones son métodos que se encuentran en nuestra tienda que nos permiten modificar los datos que hay en nuestro estado. Entonces vamos a aprender sobre getters, que nos permiten obtener algunos datos de nuestro estado, modificarlos de alguna manera, y luego poner esos datos a disposición de todos nuestros componentes. Para este punto, habremos cubierto todos los conceptos básicos de Fe3 y la API de composición. Voy a poner todo ese conocimiento en práctica creando una aplicación del mundo real llamada Nope balls, que es una aplicación para tomar notas que vamos a hacer parecer receptivo y presentable usando la biblioteca CSS Bohmer. Te presentaré la nota app de Paul. Entonces vamos a crear un proyecto completamente nuevo utilizando la última herramienta view build. Nuevamente, usando V8, vamos a instalar Vue Router manualmente completamente desde cero y configurarlo todo desde cero. Entonces en el módulo 14, vamos a trabajar en el diseño de nuestra app usando la biblioteca CSS. Vamos a instalar Bohmer, crear un hermoso diseño navbar que sea sensible, que muestra directamente enlaces a páginas A2 en el escritorio, luego mostrará un menú de hamburguesas en el móvil. Y luego vamos a trabajar en el diseño de nuestra página de notas. En el módulo 15. Voy a agregar algunos métodos de datos y componentes infantiles a nuestra app. Vamos a configurar los datos y métodos para agregar una nueva nota. Vamos a crear un componente hijo para nuestras notas. Vamos a pasar datos a ese componente hijo usando accesorios. Vamos a configurar una propiedad computada y vamos a agregar la posibilidad de eliminar un nodo. Módulo 16. Vamos a instalar un centavo un set todo completamente desde cero. Y también vamos a crear un componente reutilizable, que vamos a utilizar en múltiples páginas de nuestra app. Entonces después de haber instalado centavos, vamos a configurar los estados para nuestra app donde vamos a almacenar todos nuestros datos de notas. Entonces vamos a configurar algunas acciones para agregar, eliminar y actualizar una nota. Entonces vamos a crear un getter en la puerta de nuestro Penny por conseguir el contenido de una nota basada en el ID de una nota. Entonces vamos a crear una segunda página, una página de Estadísticas, que se mostrarán estadísticas que se basan en nuestros datos de notas. Voy a montar un par de nuevos getters para hacer esto. También vamos a crear un componente reutilizable, que vamos a utilizar en múltiples páginas de nuestra app. Vamos a hacer que este componente reutilizable personalizable usando accesorios. En el módulo 17, vamos a añadir algunas directivas, relojes, y composable a nuestra app note balls. Vamos a añadir una directiva que nos permitirá enfocar de forma automática un área de texto. Voy a hacer que esta directiva sea global y usarla en múltiples páginas. Vamos a montar un vigilante. Vamos a crear una composable personalizada que nos permitirá compartir datos reactivos y métodos relacionados a través de páginas. Entonces vamos a mejorar esa composable al permitirle aceptar múltiples parámetros. Y también vamos a añadir una composable desde la vista use biblioteca, el click fuera composable. Por último, en el Módulo 18, soy un modal de eliminación a nuestra app, que se mostrará cuando tratemos de eliminar una nota. Y nos vamos a pedir que confirme, vamos a configurar el modal, conseguir que parezca presentable. Vamos a permitir que este modal modifique datos en su componente de página principal mediante valor modal y actualice el valor del modelo, vamos a reutilizar el clic fuera composable desde la vista utilizar para que podamos hacer click fuera de este modal para cerrarlo, vamos a configurar algún control de teclado piramidal para que podamos golpear Escape para cerrar el modal encendido en el proceso de hacer eso, también vamos a hacer uso de algunos ganchos de ciclo de vida. 3. ¿Cuál es la API de composición?: El API de composición es la nueva característica más grande que vino con V3. Pero, ¿cuál es la API de composición? Bueno, nos da una nueva forma de crear componentes de vista, una alternativa a la API de Opciones. Ahora todavía podemos usar la API de opciones en v3 ups, pero consideraría usar la API de composición exclusivamente, especialmente en aplicaciones más complicadas y componentes de visualización. El API de composición resuelve dos problemas principales que a veces vemos con opciones aplicaciones API, especialmente ups más complicados. Número uno, nos permite agrupar más fácilmente el código relevante en las secciones de scripts de nuestros componentes de vista. Y número dos, nos permite reutilizar nuestro código más fácilmente en nuestros datos reactivos y nuestros métodos y relojes, etc., utilizando composable. Para demostrar esto primero, echemos un vistazo a este código API de Opciones. En la API de Opciones tenemos nuestra exportación predeterminada, y dentro de eso tenemos todas nuestras diferentes opciones separadas por opciones. Me refiero a cosas como métodos de datos, ganchos de ciclo de vida. En este ejemplo aquí tenemos dos conjuntos de datos completamente no relacionados. Contamos con una propiedad de nombre de usuario fuera de propiedad para determinar si se muestra o no un modal. Entonces en nuestra opción de métodos, tenemos un método para actualizar el nombre de usuario y un método para mostrar el modal cambiando esta propiedad de datos. También tenemos un gancho de ciclo de vida, el gancho montado, que disparará ambos métodos. No obstante, todo el código pertinente está separado. Tenemos el nombre de usuario aparecer. El método para el nombre de usuario aquí abajo. El gatillo de este método en este halcón derretido aquí abajo. Esto significa que en componentes más complicados, tenemos que hacer mucho desplazamiento hacia arriba y hacia abajo a métodos de datos, propiedades computadas, ganchos de ciclo para trabajar en código que está relacionado. El API de composición resuelve este problema al permitir va a eliminar todas estas opciones y permitir va a agrupar todo nuestro código juntos lógicamente. Echemos un vistazo a una versión API de composición de este código. En este ejemplo, estamos haciendo exactamente lo mismo. Estamos configurando variables de datos reactivas para nuestro nombre de usuario y nuestras propiedades modales de fechas mostradas con la configuración de métodos para manipular estas propiedades de datos seguían activando estos métodos en el gancho montado aquí y aquí. Excepto esta vez todo nuestro código relevante se agrupa. Todo el código relacionado con el nombre de usuario agrupado aquí. En todo el código relacionado con el modal se agrupa aquí con la composición API no es sólo propiedades de datos, métodos y ganchos del ciclo de vida. Podemos agrupar juntos, podemos agrupar todo, ya sea computado, propiedades, relojes, directivas, etc. Esto hace que nuestras vidas sean mucho más fáciles, sobre todo cuando estamos trabajando en componentes de vista mucho más complicados y más largos. El segundo problema, no la API de composición resuelve, es que nos facilita mucho la reutilización del código a través de nuestros componentes usando composable en la API de Opciones, podríamos compartir código entre componentes usando mixins. Echemos un vistazo a nuestro ejemplo de código API de opciones. Nuevamente, digamos que queremos reutilizar la propiedad de datos de nombre de usuario y nuestro método update Username a través de múltiples componentes en la API Options, podríamos extraer este código en un mixin, como este, donde literalmente acabamos de copiar la propiedad de datos de nombre en el método octeto username y ponerlo en un mixin. Podemos entonces importar este mixin en un componente o un montón de diferentes componentes como este, importar nombre de usuario de mezcla de etc.. Pero en este ejemplo aquí también estamos importando diferentes mixin que no tiene relación. Esta mezcla modal mezcla en. Y se puede ver que en la charla de MTSU donde método de disparo desde el nombre de usuario de mezcla, esta actualización Método de nombre de usuario. El problema es que no es obvio de dónde viene este método. ¿ Viene del nombre de usuario mezclando o viene de los lagos modales en si no estás familiarizado con el proyecto que estás trabajando actualmente, es posible que no puedas decir dónde este método viene de sin abrir realmente estos archivos de mezcla y estoy mirando a través del código. Nuevamente, esto puede convertirse en un problema enorme en aplicaciones de vista más complicadas donde tenemos muchos componentes diferentes, siendo utilizados muchos mix-ins diferentes. Echemos un vistazo a nuestro ejemplo de API de composición de nuevo. Digamos que queremos hacer lo mismo. Queremos extraer la variable de datos de nombre de usuario, y queremos extraer esta actualización Método de nombre de usuario donde podamos recortarlos y pegarlos en una composable, que se vería algo así. En una composable acabamos de exportar función. Y se puede decir dentro de que tenemos nuestra variable de datos de nombre de usuario y nuestro método de actualización Nombre de usuario también. Y entonces podemos importar este composable a cualquier componente de vista que queramos. Así, solo importamos la función de nivel raíz que exportamos. Entonces podemos usar la estructuración para extraer sólo las cosas que necesitamos de esa composable. En este caso, estamos extrayendo la variable de datos de nombre de usuario y el método update Username. Ahora cuando usamos algo de nuestra composable, como en este gancho montado, estamos disparando el método de actualización Username. Podemos ver exactamente de dónde viene este método. Así que de nuevo, esto se convierte en una ventaja masiva con la API de composición, especialmente en aplicaciones mucho más complicadas y componentes de visualización. Ojalá esto explique las enormes ventajas que vienen con la API de composición sobre la API de opciones. 4. Configuración del editor y de software: Puedes usar cualquier editor que quieras para este curso, pero voy a estar usando VS Code porque es gratis y tiene un montón de extensiones diferentes que van a hacer nuestra vida más fácil. Si quieres tener la misma configuración se hace, entonces sigue a lo largo. Quieres ir al código dot Visual Studio.com. Simplemente descárgalo. Si estás en Windows, es posible que necesites ejecutar un instalador, pero en un Mac, te dará un archivo zip con una aplicación que solo puedes arrastrar a la carpeta de aplicaciones. Solo voy a conseguir la carpeta Aplicaciones y arrastrar esto hasta allí. Ahora deberíamos poder lanzarlo. Haga clic en abrir. Ya podemos ver la instalación por defecto del código VS. Solo voy a arrastrar un proyecto de vista a esto solo para demostrar algunas de las extensiones que vamos a usar. A pesar de que no es necesario hacer esto. Pero si tienes un proyecto de vista, ¿cómo acaban de arrastrarlo? Voy a arrastrar en esta vista las pruebas hacia arriba, que es básicamente solo la aplicación de vista predeterminada construida con la última herramienta de compilación. Con eso vamos a estar usando más adelante, voy a hacer clic en verdades y luego sí. Entonces solo voy a agrandar esto un poco. Acercar presionando Command Plus allow. El atajo podría ser diferente en Windows. Vamos a instalar algunas extensiones. Queremos dar click sobre esto aquí con estas casillas. Esta es la tienda de extensión. En las dos primeras extensiones hay un tema de iconos y un tema general para simplemente hacer que el solicitante sea un poco más bonito, pero estas son simplemente totalmente opcionales. Por lo que quieres buscar material, yo llamo tema. Queremos este aquí. Haga clic en Instalar. Y luego queremos elegir Material Icon Theme de este menú desplegable. Y ahora si volvemos al Explorador, verás que en nuestro Explorer aquí tenemos estos hermosos iconos para todos nuestros diferentes tipos de archivos, como este bonito pequeño View icon fall components. Vamos a saltar de nuevo a la tienda de extensiones y voy a buscar el tema de make apps. Y esto es lo mismo que yo uso, pero esto es totalmente opcional. Voy a hacer click en eso. Haga clic en Instalar. Elija el nombre de maquillajes en el menú desplegable. Este es un tema relajado, fácil en los ojos con agradable y suave resaltado de sintaxis. Como se puede ver aquí. Si no te gusta este tema, entonces hay un sitio web donde puedes navegar por todos los diferentes temas. Quieres ir a. Vs Código themes.com. Puedes encontrar hasta los diferentes temas claros y oscuros aquí. Sólo escoge uno que te guste. Sólo voy a cerrar esto, saltar nuevo a la tienda de extensión. Vamos a instalar una extensión llamada acción duplicada. Así que sólo voy a buscar eso. Es éste de aquí. Haga clic en Instalar. Lo que esto hará es si saltamos de nuevo a nuestro explorador, haz clic derecho en un archivo, ahora tenemos esta opción para duplicar archivo o directorio, lo cual es realmente útil cuando estás trabajando en ver apps porque muchas veces quieren simplemente duplicar un componente y luego modificarlo. Y volveré a saltar de nuevo a la tienda de extensiones por defecto, como viste antes. Ver componentes no se ven muy bonitos. Y dijeron, Vamos a arreglar eso con la siguiente extensión. Y queremos buscar vista extensión volar, APAC. Tenemos que desplazarse un poco hacia abajo para encontrar el correcto. Es éste de aquí por el bro Enero. Voy a instalar eso. Esto tiene un montón de diferentes extensiones en ella por TEA, que es un formato de código que en realidad voy a desactivar porque realmente no soy gran fan de los formatos de código está alternando etiqueta que cambiar automáticamente el nombre de los ataques. Si cambiamos el nombre del objetivo de apertura, cambie el nombre de la etiqueta de cierre por nosotros. Tenemos algunos fragmentos de código JavaScript, etiqueta de cierre automático, que cerrará automáticamente las etiquetas HTML, y luego un montón de otras. Los principales que queremos aquí en estos dos en la parte inferior, estos nos van a dar hermoso resaltado de sintaxis , soporte de lenguaje, ver fragmentos y cosas así. Quiero instalar esto, y eso ya está instalado, pero en realidad voy a desactivar algunas de estas extensiones que se agrega. Voy a borrar el campo de búsqueda y podríamos desplazarnos por nuestras extensiones instaladas aquí. Voy a desactivar más bonita, que por cierto, creo que puede interferir con la siguiente extensión que vamos a instalar, pero puedes dejarlo brazo si lo prefieres y ver si funciona para ti. Voy a deshabilitar la pelusa CSS porque no vamos a estar haciendo ningún TypeScript en este curso. Mucho al respecto. Por lo que haré clic en este botón Recargar requerido para recargar la app. Ya verás que ahora tenemos este hermoso resaltado de sintaxis para nuestros componentes de vista. A la última extensión que voy a instalar se llama atributos HTML divididos. Cuando estamos trabajando en aplicaciones de visualización, a menudo tenemos elementos de componentes de vista con toneladas de diferentes atributos, directivas y manejadores de clics, todo eso. Estos pueden llegar bastante largos y a menudo queremos en cada atributo en una nueva línea como esta, que realmente consume mucho tiempo haciéndolo manualmente. Bueno, esta prórroga hará eso por nosotros. Voy a buscar atributos HTML divididos. Es éste con el ícono verde. Yo instalaré eso. Voy a cambiar la configuración predeterminada para esta extensión. Voy a desplazar hacia abajo esta descripción hasta la sección de ajustes aquí abajo. Sales o la opción determinará el orden de los atributos. Para que puedas ver que estamos poniendo atributos más importantes como Vf y Vi. Vi modelo en la parte superior y atributos menos importantes como ID de clase más abajo hacia abajo hacia abajo. Entonces voy a seleccionar esta matriz y copiarla. Entonces voy a saltar a los ajustes de configuración y luego a la configuración de extensión. Voy a marcar esta casilla aquí, que colocará nuestro soporte de cierre en una nueva línea, que prefiero. Y luego bajo orden de asalto, voy a hacer click en editar en settings.js. Normalmente mucha esta opción bosques, pero no lo es. Entonces vamos a tener que hacerlo manualmente. Mucha coma aquí después de esta última opción, fuera algunas cotizaciones. Y vamos a escribir en atributos HTML divididos orden de clasificación de puntos, no es auto completado ese bosque. Y luego seleccionaré esta matriz. Pegue el que copiamos de la página de configuración. Ahorra eso. Y ahora si volvemos a este archivo App.vue, si selecciono esta etiqueta de imagen, que es una etiqueta de cierre automático, y phi son la extensión con Control Alt Shift y un. por cierto, puedes cambiar eso atajo de teclado si lo desea. Dices que divide todos nuestros atributos en nuevas líneas al instante. También hará el revés también. Si selecciono esto y phi son la extensión de nuevo, los volverá a poner en una sola línea. Echemos un vistazo a que el orden de las sales está funcionando. Por lo que una gran cantidad de atributo de modelo V al final myVar. Ojalá que si ejecutamos la extensión, este modelo V se colocará en la parte superior, que es, solo voy a deshacer todos mis cambios aquí. Ahorra eso. Creo que estas son todas las extensiones que voy a usar. También vamos a estar usando mucho el terminal en VS Code para alternar el terminal, solo presiona Control y Buck enfermo y saldrá así. Y también puedes hacer que desaparezca también con el mismo atajo, tus indicaciones podrían parecer un poco diferentes, pero no te preocupes, todo debería seguir funcionando. 5. Vue Devtools: Lo siguiente que queremos instalar es ver herramientas de profundidad, que nos ayudarán a depurar nuestras apps de Vue, sobre todo cuando empezamos a trabajar con centavo encendido, más adelante, quieres ir a gatear, acompaña pequeños puntos, más herramientas y extensiones. Un ángulo a este menú de la izquierda. Y luego abre Chrome Web Store. Buscar vista, herramientas dev. Aquí hay tres extensiones diferentes. En el momento en que estoy grabando esto, necesitamos usar la versión Beta para V3 ups. Pero como estás viendo esto en el futuro que la versión de lanzamiento, ésta podría funcionar. Entonces solo te sugeriría que pruebes la versión de lanzamiento y pensé que no funciona, luego prueba la versión Beta, pero voy a instalar la versión beta. Haga clic en Agregar a la extensión Chrome que ahora está instalada. Basta con comprobar que está funcionando. Vamos a lanzar una vista hacia arriba en el navegador. Voy a abrir el proyecto que había abierto antes. Saltar a la terminal y ejecutar npm run dev, no funcionó. Creo que eso es porque no tengo instaladas las dependencias. Entonces ejecutaré npm install primero. Luego ejecute npm run dev comando y haga clic en este enlace aquí. Ahora puede ver esta aplicación de vista básica ejecutándose en el navegador. Lanzamiento, las herramientas dev. Podemos simplemente ir a nuestras herramientas de desarrollo de Chrome yendo a View Developer, Developer Tools. O puedes usar el atajo de teclado. Si hacemos click en esta pequeña flecha, deberías tener una opción de vista. Y ahí es donde vive nuestra vista DevTools. Y puedes ver todos nuestros componentes aquí. También podemos ver datos relacionados con componentes. Por lo que este componente Helloworld cuesta la propiedad del mensaje, el valor de usted lo hizo. Solo voy a acercar un poco en realidad a las herramientas dev. Y esto va a ser especialmente útil más adelante cuando empecemos a trabajar con la gerencia de Penn State. 6. Vue 3 Docs y instala Node.js [Module 2]: De acuerdo, empecemos ahora creando una nueva vista de proyectos. En primer lugar, vamos a saltar al sitio view doc. Sólo voy a Google V3. Joe a la página web V3. En su momento estoy grabando esto, el View Docs o a punto de ser rebota masivamente. Voy a estar usando la nueva versión de los docs en este curso porque nos muestra cómo construir un proyecto de vista tres con V8 utilizando la última herramienta de compilación. Para saltar a la siguiente versión de la documentación, voy a saltar a la barra de direcciones. Acaba de cambiar esta v3 a puesta en escena. Ahora vemos la hermosa nueva documentación. Si ya estás viendo esto, entonces De alguna manera lo estás. Y después queremos hacer click en instalar. Desplázate un poco hacia abajo. Antes de poder crear un nuevo proyecto de Vue, necesitamos asegurarnos de que tenemos instalado Node.js. Si no tienes eso instalado, entonces haz clic en este enlace. Probablemente quieras instalar el de la izquierda aquí. Y solo quieres descargarlo e instalarlo. O si lo prefiere, puede usar herramientas de control de versiones de nodos como nvm. 7. Crea un proyecto Vue: Volvamos a la página de view docs y creamos nuestra primera vista tres proyectos con VT con la última herramienta de compilación. Para crear un nuevo proyecto puede simplemente ejecutar este comando en nuestra terminal. Simplemente acercaré un poco, NPM en él, ver más reciente. Voy a copiar este Código VS y saltar a la terminal. Y de nuevo, podemos alterar eso con el comando y la espalda enfermos. Voy a pegar ese comando en. Lánzala. Por cierto, quieres asegurarte de que estás en la carpeta donde guardas tus proyectos. Necesitamos instalar este crear vista último paquete. Así que sólo escribiré y dos, permitir eso. Nos va a pedir algunas opciones aquí para el nombre del proyecto, que también será el nombre de la carpeta. Voy a usar los conceptos básicos del tablero de API de composición de Vue porque vamos a estar usando esto para aprender todos los conceptos básicos de v3 y la API de composición. Voy a elegir nodo a TypeScript saber al soporte de JSX. Voy a elegir sí para agregar Vue Router a nuestra app más adelante en el curso, cuando creamos nuestra app de curso, notas bolas, vamos a estar eligiendo notas, esta opción. Y en realidad te voy a mostrar cómo instalar Vue Router manualmente desde cero. Pero por simplicidad, mientras estamos aprendiendo lo básico, voy a elegir Sí y conseguir la herramienta de compilación para hacer esto sigue automáticamente. De nuevo para opinión, voy a elegir sí, aunque más adelante en el curso, les voy a mostrar cómo agregar opinión a una vista tres proyectos manualmente. Voy a elegir saber volver a probar saber a Chipre, saber a ES pelusa. Es posible que quieras considerar usar ES pelusa en tus propios proyectos. Pero por simplicidad, voy a elegir saber solo para los fines de este curso para que no te pongas un montón de molestos errores de pelusa. Pero si de verdad quieres elegir sí, entonces puedes hacerlo pero voy a elegir No. Eso está terminado. Lo puedes ver andamios nuestro proyecto súper rápido y nos dice cómo empezar. Necesitamos cd en la carpeta que creó, ejecutar NPM install para instalar las dependencias y ejecutar npm run dev para iniciar la aplicación en el navegador. Así que sólo voy a saltar al buscador. Puedo ver aquí se crea la carpeta. Así que voy a arrastrar eso al Código VS. Abra de nuevo el terminal, ejecute NPM install para instalar las dependencias. Terminemos y podemos lanzar la app con npm run dev. Podemos ver esta URL aquí. Nosotros Comandamos y hacemos clic en eso. Ahora podemos ver el básico V3 y V2 empieza a envolver corriendo en el navegador. 8. Configuración de proyectos: Simplificemos este proyecto tanto como sea posible para que nos sea fácil practicar los conceptos básicos de v3 y la API de composición. En primer lugar, solo quería cambiar el título que aparece en la parte superior, que actualmente dice VTE arriba. Entonces voy a saltar a index.html, cambiar el texto en esta etiqueta de título para ver los conceptos básicos de la API de composición. Ahorra eso. Y vemos esa actualización al instante, yendo a cerrar eso. Y ahora simplificemos nuestras páginas o nuestras vistas. Actualmente solo tenemos dos páginas o vistas, la vista de casa y la vista. Simplificemos primero toda la vista, voy a ir a fuente y vistas, vista casa, vista de puntos. Sólo voy a dejar de aparecer este mensaje eligiendo No volver a mostrar. Simplemente cerraré eso. Y a veces voy a estar escondiendo la barra lateral aquí. Si quieres ocultarlo, puedes ir a Ver y apariencia y cambiar esta barra lateral de mostrar o puedes usar el atajo de teclado. Sólo voy a ocultar eso por ahora. Voy a quitar esta etiqueta de script. Voy a quitar todo dentro de las etiquetas de plantilla y apenas arrancar un div con una clase de casa. Dentro de eso asignan un rumbo H1. Simplemente ponga el texto a casa y guarde eso. Ahora podemos ver que está actualizado. Que voy a copiar este código. Saltar a sobre la vista de puntos Vue en la misma carpeta. Sólo pega sobre todo aquí. Cambiaré la clase a aproximadamente. Cambie el texto en el encabezamiento a aproximadamente también. Ahorra eso. Y ahora tenemos dos vistas realmente simples. Ahora vamos a deshacernos de todas estas cosas en la parte superior. Y eso es todo. Nuestro componente de vista raíz, que es app.vue en la fuente app.vue. Así que voy a abrir eso arriba de la barra lateral. Cuánto vas a esconder la terminal también. No necesitamos ver la terminal la mayor parte del tiempo. Todo lo que realmente quiero en nuestro diseño es esta navegación aquí para que podamos llegar a nuestras páginas. Y ese es este elemento nav aquí con estos dos componentes del link del router. Entonces voy a copiar este elemento nav en ambos de estos enlaces del router. Y luego voy a seleccionar el conjunto de este encabezado. Sólo pega esos sobre eso. Arreglar la sangría. Sí necesitamos asegurarnos de dejar este componente de vista del router porque nos permiten mostrar nuestras vistas reales, nuestra vista de casa y nuestra vista. Yo lo guardaré. Esto se ve bonito y sencillo. Voy a quitar la sección de script y guardar eso. Voy a quitar algunos de estos estilos, pero no todos porque algunos de ellos se ven bastante iguales. Si arrastramos esto, podemos ver que más allá de cierta resolución, todo se mueve alrededor. Así que sólo voy a quitar los estilos que están haciendo eso. Si nos desplazamos por esta sección de estilo, podemos ver aquí esta consulta de medios con el min-width establecido en 100 a cuatro píxeles. Sólo voy a derrumbarme haciendo clic en esta pequeña flecha al lado de eso. Seleccione toda esa consulta de medios. Simplemente elimine eso y guárdelo. Y ahora si aumentamos el ancho del navegador simplemente debe permanecer igual, que no necesitamos ninguno de los componentes en la carpeta de componentes. Ahora, voy a caer a los componentes fuente. Voy a seleccionar todo en la carpeta de estos componentes haciendo clic en el primer elemento, manteniendo pulsada la tecla Mayús y haciendo clic en la parte inferior, y luego haga clic con el botón derecho, Eliminar. Deshazte de esos. Vemos esta flecha, pero si solo recargamos la página que el error desaparece. Y ahora tenemos app súper simple que podemos usar para empezar a aprender los conceptos básicos de v3 y la API de composición. Así que empecemos a aprender lo básico. 9. Opciones API vs. API de composición [módulo 3]: Vamos a crear una cuenta realmente simple están fuera usando la API de opciones y luego convertirlo en la API de composición. Esto nos ayudará a ver rápidamente las diferencias entre los dos enfoques. Y lo haremos en nuestra vista de casa. Voy a saltar a vistas de fuente sobre la vista de casa, vista de puntos. Sólo voy a deshacerme de este rumbo. Sólo voy a tener un div con un botón y un contador. Mucho, un elemento de botón con una clase de btn con el texto menos. Entonces voy a duplicar eso. Cambia el texto a plus. Y luego en el medio, agregaremos un lapso con una clase de conteos. Por ahora, solo pondré 0 ahí y guardaré eso. Pensemos sólo algunos estilos para poner esto en el centro, que se vea un poco más bonito. Agreguemos un bloque de estilo. Se dirigirá a esta casa div acaba de enviar a todo. Así que no mantengas el texto alinear centro. Ahorra eso. Un poco de relleno. Entonces nuestro consejero no se detiene justo en contra del nav. Establezca el relleno en 20 píxeles y guárdelo. Apenas aumentemos el tamaño de estos botones y el contador y lo hagamos un poco de espacio entre todo. Así que voy a apuntar a la clase de botones en la clase de consejo. Establezca el tamaño de fuente en 14 píxeles. Ahorra eso. Y pondré el margen en diez píxeles, guarde eso. Eso se ve bastante decente. 10. API de opciones: datos y métodos: Vamos a configurar algunos datos y métodos para que esto funcione usando la API de opciones. Tenemos que agregar nuestra sección de guiones. Y dentro de eso necesitamos sumar nuestro defecto de exportación. Vamos a configurar nuestros datos primero. Para este contador, necesitamos agregar un método de datos que devuelva un objeto. Podemos poner todas nuestras propiedades de datos aquí. Mucha propiedad llamada consejera, establece eso en 0, salvo eso. Deberíamos poder usar eso en nuestra plantilla. Ahora, deshazte de este 0, nuestras llaves dobles rizadas. Y vamos a poner contador aquí y ahorrar eso. Si cambio esto ahora, deberíamos verlo actualizar en la plantilla que hacemos. Voy a volver a poner eso a 0. Ahora vamos a establecer algunos métodos para aumentar y disminuir este contador. Voy a agregar un manejador de clics a este botón. Este botón plus. Haga clic en iguales disparará un método llamado contador de aumento. Vamos a crear este método. Entonces después de nuestro método de datos, mucha coma, y luego necesitamos agregar nuestros métodos objeto. Y vamos a crear este método aumentar los recuentos de todo lo que queremos hacer es aumentar esta propiedad de mostrador en uno. Entonces para acceder a nuestras propiedades de datos, solo podemos hacer estos puntos y luego asesorarnos. Y sólo podemos hacer plus plus para aumentarlo en uno. Lo guardaré y veamos si eso está funcionando todavía. Podemos aumentar el contador. Por lo que ahora solo necesitamos un método para disminuir al consejero. Entonces mucha coma aquí y voy a duplicar este método, renombrarlo para disminuir contador, acaba de cambiar el código a este contador de puntos menos menos menos para disminuir esta propiedad del consejo. Y luego copiaré este manejador de clics del botón más y lo agregaré al botón menos y acabo de cambiar el nombre del método para disminuir counte y guardarlo. Y ahora podemos aumentar y disminuir nuestro contador. 11. Conviértalo a API de composición: Cambiemos esta sencilla aplicación a usar la API de composición. Y una cosa importante a tener en cuenta es que todo en la plantilla se mantiene igual. No necesitamos cambiar nada en la plantilla. Generalmente con la API de composición, todo en la plantilla funciona exactamente igual. Utilizamos propiedades de datos, métodos de propiedades calculadas exactamente de la misma manera. El único lugar en el que hacemos las cosas manera diferente es en la sección de guiones. Voy a comentar esta sección de script de API de Opciones. Por ahora. Mucho comentario de apertura en la parte superior de la misma, y luego un cierre comenta en la parte inferior de la misma. Agreguemos una nueva sección de script donde usaremos los scripts de la API de composición. Ahora podemos usar la API de Composición con dos patrones diferentes. Ahí está el patrón de función de configuración, que fue el patrón original, que vino en la API de composición salió por primera vez. Y luego tenemos el segundo patrón, que es el patrón de configuración de script, que fue lanzado más adelante es mucho mejor. Pero por ahora, solo utilicemos el patrón de función de configuración original. Aunque nos gustará usar el patrón de configuración de script superior. Para utilizar el patrón de función de configuración, nuevamente, necesitamos agregar nuestro valor predeterminado de exportación. Pero no agregamos opciones como métodos de datos, etc. En cambio, agregamos una función de configuración como esta y colocamos todo nuestro código aquí. Básicamente todas nuestras propiedades de datos, métodos, propiedades computadas, relojes, etc., todos irán dentro de esta función de configuración. 12. API de composición: datos (refs) y métodos: Vamos a configurar una variable de datos reactiva para nuestro contador. Ahora en la API de composición, hay dos tipos principales de datos reactivos. Tenemos refs y objetos reactivos. Voy, me meteré en estos con más detalle más adelante en el curso. Bueno, básicamente un objeto reactivo nos permite crear un objeto de datos con un montón de propiedades de datos relacionadas dentro del objeto. Considerando que el RF se utiliza generalmente para elementos simples de datos individuales, como una cadena y matriz o un número. Por lo que tiene sentido usar un áspero para esto, para configurar un href, solo podemos crear una constante y darle un nombre. Cualquiera que sea el nombre que utilicemos será el nombre que está disponible en la plantilla a. Entonces vamos a llamar a este contador, ya que ese es el nombre que hemos usado en nuestra plantilla aquí. Y queremos establecer eso igual al método ref como este. Y luego podemos pasar nuestro valor inicial dentro de este método. Así que vamos a establecer eso a 0 inicialmente porque estamos usando este método ref, necesitamos importar este método desde la vista. Entonces por encima de nuestra exportación, necesitamos importar desde la vista. Ahora este representante de consejo aún no está disponible en nuestra plantilla. También tenemos que devolverlo cuando estamos utilizando la función de configuración, ollas a la derecha a la parte inferior de nuestra función de configuración, necesitamos agregar una declaración de retorno. Esta declaración de retorno siempre debe permanecer en la parte inferior de la función de configuración. Y entonces sólo tenemos que devolver este consejo ref, así y salvarlo. Y ojalá este contador se espere arriba ahora podemos ver 0 en la página. Y si cambiamos el valor de este href y lo guardamos, podemos ver que está actualizado en la plantilla. Sólo voy a volver a poner esto a 0 y guardar eso. Ahora tenemos que sumar nuestro contador disminuido y aumentar los métodos de contador. Y la forma en que hacemos esto es solo creando algunas funciones con nombre en cualquier lugar dentro de esta función de configuración. Y entonces tenemos que devolverlos igual que devolvemos este contador ref. Entonces vamos a crear un método para aumentar el contador. Entonces podemos hacer esto así con la palabra clave function, función increase. Consejero. Podemos hacer una constante llamada contador de aumento, que configuramos igual a una función como esta, que es el método que suelo usar. Todo lo que queremos hacer es aumentar este contador ref por uno. Y se podría pensar que podríamos simplemente hacer contar plus, plus. Pero en realidad esto no funcionará con la API de composición porque cuando creamos un bruto, realmente crean un objeto y el valor de nuestro ref se almacena en una propiedad llamada valor. Entonces para acceder a esto, en realidad necesitamos hacer consejero dot value, y entonces podemos hacer plus plus de nuevo, para poder utilizar este método en nuestra plantilla, necesitamos devolverlo. Por lo que sólo podemos pensarlo a este objeto de retorno como este contador de aumento. Dado que ya tenemos OK click handler aquí, que está disparando el mismo método, debería funcionar. Por lo que guardaré eso, haga clic en el botón más y eso está funcionando. Ahora solo necesitamos crear el método de contador disminuido. Duplicaré este método aumentado de calcio, renombrarlo para disminuir contador y solo cambiaré el plus plus a menos menos para que disminuya el valor del contador en uno. Y de nuevo, tenemos que devolverlo mucho esto a nuestra declaración de retorno aquí abajo, disminuir delta, salvo eso. Y ojalá ambos botones deban estar trabajando sin embargo todo está funcionando. 13. Configuración de guiones: ¡Una manera más fácil!: En pocos tres puntos se una nueva sintaxis o patrón introdujo una nueva sintaxis o patrón para la API de composición, que es el patrón de configuración de script o sintaxis. La configuración de script nos permite hacer que nuestros componentes sean mucho más simples, menos desordenados, y más fáciles de administrar, nos permite deshacernos del valor predeterminado de exportación, deshacernos de la función de configuración, y lo más importante, deshacerse de la declaración de devolución. Con la configuración de scripts A2, ya no tenemos que preocuparnos por asegurarnos de que todas nuestras propiedades de datos, métodos, propiedades computadas, etc, sean devueltos. Ahora en un componente simple como este, podría no marcar mucha diferencia, pero en una realmente lo complica con cientos de componentes que cada uno tiene sonidos de diferentes propiedades de datos, métodos, vigilantes, propiedades computadas, etcétera Realmente hace nuestra vida más fácil no tener que mantener constantemente esta declaración de retorno actualizada cada vez que cambiamos cualquiera de nuestros datos propiedades, métodos, o renombrarlos, etc. Para mi propio up, Fujitsu, que actualmente está trabajando, en realidad pasó un día entero convirtiendo alrededor de 100 componentes de esto un patrón de función de configuración al nuevo script patrón de configuración. Y ese fue un día realmente aburrido, pero valió la pena porque ahora la app es mucho más fácil trabajar. Por cierto, el patrón de configuración de script es el patrón que voy a usar para el resto del curso porque es mucho más simple y es el patrón que recomienda el equipo Vue. Así que vamos a convertir este código al nuevo patrón de configuración de script. Voy a comentar esta sección de guiones. Agregaremos aquí una nueva sección de guiones. Ahora no necesitamos agregar nuestro valor predeterminado de exportación, y no necesitamos agregar esta función de configuración. Todo lo que tenemos que hacer es agregar un atributo a esta etiqueta de script de apertura como esta. Ahora podemos colocar todo nuestro código aquí, todas nuestras propiedades de datos, métodos, etc. Y ni siquiera necesitamos devolver ninguno de estos. Vamos a copiar nuestros dos métodos en nuestro consejo ref del viejo código. Pega directamente aquí y solo arregla la sangría. Todavía necesitamos importar este método ref desde la vista. Así que voy a copiar eso. Simplemente colocamos todas nuestras entradas en la parte superior de esta sección de guiones En esto. Y ahora no necesitamos devolver nuestros datos ni nuestros métodos. Cualquier propiedad o método de datos son propiedades calculadas que declaramos en el nivel superior de esta etiqueta de script estarán disponibles en nuestra plantilla automáticamente. Entonces si guardo esto ahora, solo debería estar funcionando de inmediato. Aún así. Sigue funcionando. Ahora hemos reducido nuestra sección de guiones de, digamos, 21 líneas a solo 11 líneas. Hemos simplificado masivamente nuestro código y ya no tenemos que preocuparnos por esta molesta declaración de devolución. 14. Refs [Module 4]: Existen tres tipos principales de datos que podemos utilizar en una aplicación API de composición. Reps, que ya hemos agregado en esta app, objetos reactivos y datos no reactivos. Ya hemos cubierto refs. Básicamente acabamos de configurar una constante o un conjunto de variables que sea igual al método ref que necesitamos importar desde vista y luego simplemente pasar en el valor inicial. Podemos hacer cambios a ese valor accediendo a la propiedad value de la constante que hemos configurado, no podemos tantos repetidores como queramos. Así que agreguemos otro. Digamos que queremos un título para nuestro contador y queremos poder cambiar ese título programáticamente, todo con vinculación bidireccional. Añadamos otro rep aquí. Podríamos hacer const conteos en el título, establecer eso igual a un método ref, pasar en un valor inicial de, digamos mi contador. O podemos mostrar esto al deshacernos de la palabra clave const y luego agregando una coma después de la primera const. Nuevamente, no necesitamos devolver esta constante. Debe estar disponible en nuestra plantilla de forma directa. Así que agreguemos la etiqueta H3, tanto este div dará salida a este título. Así que dobles llaves rizadas, título de contador, salvo eso. Ahora podemos ver ese título en la plantilla para que sea un poco más claro cuál es este título, solo voy a añadir un punto y coma después de este título. Ahora si cambiamos el valor de este gráfico, deberíamos ver la actualización del título, que hacemos. 15. Binding de datos bidireccional: su mayor parte, el enlace de datos bidireccional funciona exactamente igual en la API de composición que en la API de opciones. Sólo para demostrar esto, vamos a añadir una entrada a nuestra página, lo que nos permite modificar este título de contador que hemos almacenado en este dato ref después de este div con nuestro contador y botones mucho de div con una clase de edición. Y luego dentro de eso voy a añadir h4 encabezado con el texto, editar contador, título, dos puntos, y luego mucho. Y salva eso. Solo voy a agregar un poco de margen a la parte superior de este div. Saltaré al mientras estamos en ello. Simplemente eliminemos todos estos viejos comentarios. Y saltaré a la sección de guiones. Target, la clase de edición, a la que acabamos de empezar a ese dip, y mucho margen, superior de 60 píxeles y guardar eso. Ahora vamos a vincular esta entrada para contrarrestar, este contador título rref. Entonces para hacer eso, solo podemos saltar a esta entrada y agregar una directiva modelo V. Apenas ponerlo igual a este conteo const, el título, título de cabildo. Di eso. Ahora podemos ver nuestro recuento el título en esta entrada. Y si lo cambiamos, no es actualizar el encabezamiento aquí arriba. A lo mejor sólo tenemos que refrescar, intentarlo de nuevo aún si cambiamos el título del encabezado en esta entrada, lo vemos actualizado en nuestro rubro o lo pagamos. 16. Objetos reactivos: Podemos ver que los refs son prácticos para almacenar elementos simples independientes de datos, como un número o una cadena, o tal vez una matriz o un booleano. Pero y si queremos almacenar un montón de datos diferentes que estén relacionados juntos en un solo objeto. Un poco como lo hicimos con el método de datos en Options API Apps. Bueno, podemos hacerlo con un objeto reactivo. Digamos que queremos almacenar juntos nuestro contador y nuestro título de consejero en un solo objeto. Dado que estos datos están relacionados, entonces podríamos hacer eso con un objeto reactivo. Para configurar unos objetos reactivos, nuevamente creamos un const o podemos usar una variable. Ahora le damos un nombre a eso para que pudiéramos llamarlo consejero data. Y fijamos eso igual al método reactivo. Sí necesitamos importar esto desde la vista. Por lo que sólo podemos añadir eso a nuestro objeto de importación aquí, reactivo. Podemos simplemente pasar un objeto a este método reactivo y podemos colocar todas nuestras propiedades de datos aquí. Vamos a crear una propiedad llamada Count para nuestro contador, darle a eso un valor inicial de 0. Y entonces mucha propiedad llamada título, el título, y lo pondré a mi contador, salvo eso. Vamos a utilizar los datos de estos objetos reactivos en nuestra plantilla en lugar de los datos de estas refs. Si queremos usar el consejero que está en estos objetos reactivos aquí, solo podemos hacer recuento de puntos de datos de consejero. Si queremos usar el título, está en los objetos reactivos. Podemos simplemente cambiar esto en esta etiqueta de encabezado a Orientador data dot title. Actualicemos también este modelo V. Para utilizar estos objetos reactivos. Voy a establecer este modelo V para asesinar datos, puntos, título, y lo guardaré y recargaré. Y veamos si nuestro título está empapado. De acuerdo, sí, eso sigue trabajando en el enlace de datos bidireccional sigue funcionando así y las cuentas o está funcionando, podemos ver 0 mostrados allí. Y si cambio el valor de los contadores de puntos de datos, podemos verlo actualizar. No obstante, estos fondos no están funcionando. Y eso es porque estos métodos, el método incrementado del consejo y el método de consejero de disminución, siguen manipulando este href y no el descuento que está en nuestro objeto reactivo. Entonces vamos a actualizar estos métodos. En lugar de contar o dot value plus plus, solo podemos hacer datos de consejero, conteo de puntos más plus. Entonces en el método disminuido del consejo, solo podemos hacer recuentos de datos, conteo de puntos menos menos menos. Tenga en cuenta que no necesitamos usar el valor de punto cuando estamos usando datos que están en objetos reactivos, solo usamos el nombre de la propiedad recta, recuento de puntos de datos del consejero. Ahora vamos a guardar eso y ver si estos botones están funcionando. Sí, eso está funcionando de nuevo ahora, ya no estamos usando estos refs. El código Vs nos muestra que al encanear estos un poco. Así que vamos a comentar estos fuera. Dado que ya no usamos este método ref desde la vista, podemos eliminar eso de esta declaración import como tal y guardarla. 17. Datos no reactivos: A veces en nuestra vista componentes queremos tener una propiedad de datos que no necesita ser reactiva. Esto es fácil de hacer con la API de composición. Y te recomendaría que cualquier propiedad de datos en tu componente que no necesite ser reactivo, debes hacer no reactiva ya que esto mejorará el rendimiento de tu app. Digamos que queremos almacenar el título de nuestra app en una variable de datos, pero no necesitamos que sea reactiva. No necesitamos poder cambiar el valor de ese título programáticamente y verlo actualizado en la plantilla. Todo lo que tenemos que hacer es configurar una constante o variable. Por lo que voy a crear una constante llamada título. Simplemente establece eso igual a una cadena. Así que no estoy usando un reactivo solo una constante estándar de bog que se establece en una cadena. Pondré esta cuerda a mi increíble Kaltura arriba y guardaré eso. Esta constante ahora debería estar disponible en nuestra plantilla. Saltaré a la plantilla dentro de este div con la clase de casa. H2 dará salida a esta constante, por lo que dobles llaves rizadas. Y luego afuera, se ahorrará eso. Y ahora podemos ver nuestro título en la página. Y si cambiamos esta cadena a mi bien, contrarrestar, que tiene un poco más apt, entonces vemos esa actualización en la página. 18. Métodos [Modulo 5]: Ya hemos aprendido a agregar métodos a nuestro componente. Vamos a repasar rápidamente cómo podemos pasar parámetros a los métodos. En primer lugar, sólo voy a eliminar estos comentarios de antes. Entonces digamos que queremos poder aumentar nuestro contador por un número específico en lugar de solo por uno. Bueno, podríamos pasar en el número que queremos aumentarlo por un parámetro sobre nuestras contrapartes de aumento. Aquí, sólo podemos empezar paréntesis a nuestro nombre de método pasando un valor. Pasemos uno por ahora. Y si saltamos hacia abajo a nuestro método de contador aumentado, ahora podemos recibir ese parámetro como este. Como taquigrafía, en realidad podríamos simplemente quitar estos paréntesis si queremos. Simplemente cierre la sesión para asegurarse de que está viniendo a través de console.log y cantidad. Ahorra eso. Sólo voy a abrir las DevTools Chrome. Puedes ir a Ver en Chrome Developer Developer Tools o puedes usar el atajo de teclado en la consola aquí abajo. Si hago clic en el contable aumentado, sí, podemos ver que este número uno está bloqueado. Ajustemos la lógica y nuestro método de contador aumentado para que aumente el recuento en nuestros objetos reactivos por la cantidad que estamos pasando en lugar de solo por uno. Por lo que podemos hacer cuentas de conteo de puntos de datos igual a contar los datos, conteos de puntos más cantidad, o como taquigrafía, podríamos hacer contadores de datos de contadores de puntos más igual a cantidad. Yo lo guardaré. Asegúrate de que todavía esté funcionando. Sin embargo, sigue trabajando. Ahora podríamos sumar un segundo Boltzmann por incrementar el contador en dos. Volveré a saltar a la plantilla y duplicaré este botón de contador de aumento, pero pasaremos a este método. Simplemente cambiaré el texto de este botón a plus, plus. Guarda eso, y simplemente alejaré un poco. Ahora cuando hacemos clic en este botón, podemos ver que nuestro contador se incrementa en dos. Bueno, este botón sigue aumentando en uno. Simplemente me desplazaré hacia abajo y eliminaré ese console.log. Hagamos lo mismo por nuestra disminución del cáncer. Duplicaré este botón Contador disminuido. En el segundo botón pasaremos el valor uno, y luego en el primer botón pasaremos el valor para cambiar el texto en el botón a menos menos. Si eso, necesitamos actualizar este método de consejero disminuido. Por lo que de nuevo, podemos hacer recuentos de puntos de datos del Consejo equivale conteos de conteo de puntos de datos menos cantidad. O no necesitábamos pasar en la cantidad fossa aquí. O como taquigrafía, podemos hacer Council data dot count menos equivale a cantidad. Así que ahorremos eso y veamos si eso está funcionando. Simplemente arrastra la consola un poco. Este botón está disminuyendo el contador en uno. Este botón lo está disminuyendo en dos. Por cierto, si quieres obtener acceso al objeto de evento, entonces podríamos hacerlo con solo pasar un segundo parámetro a nuestro método. Entonces se lo pasaré a éste de aquí. En esto hay que llamarse evento Dollar. Y ahora si saltamos a nuestro mayor método de consejero tendrá que volver a poner los paréntesis. Ya que va a haber dos parámetros, entonces podemos simplemente pasar en el objeto de evento así. Puedes usar cualquier nombre que quieras, pero solo usaré una Ahora deberíamos poder cerrar esta sesión. Y luego cuando hacemos clic en esto aumentado en un voltaje, podemos decir que el objeto de evento que se está cerrando la sesión. Y entonces podemos obtener acceso a qué elemento se hizo clic, paradero estaba el cursor, etcétera Antes de seguir adelante, simplemente eliminemos este console.log. 19. Propiedades computarizadas: Las propiedades computadas son propiedades que generalmente se generan en base a datos reactivos, que se guardan en caché y solo se actualizan cuando hay cambios de dependencias. Por ejemplo, podríamos crear una propiedad computada que tome el valor de este contador, la manipule de alguna manera. El valor de nuestra propiedad computada solo se regenerará siempre que cambie el contador. Así que solo recordemos cómo agregamos propiedades computadas usando la API de opciones. Saltaré a la parte inferior de esta sección de script y agregaré otra sección de script. El valor predeterminado de exportación. El API de opciones. Tuvimos que agregar una opción calculada. Tuvimos que colocar todas nuestras propiedades computadas aquí, como mi propiedad computada. Entonces dentro de eso realizaríamos alguna lógica basada en una propiedad de datos. Entonces devolveríamos algo. Esto significaba que todas nuestras propiedades computadas tenían que ser agrupadas en este objeto computado. No obstante, con la API de composición, podemos crear una propiedad calculada literalmente en cualquier lugar dentro de nuestra sección de script. Esto es realmente útil, especialmente en componentes más grandes porque significa que podemos agrupar todo nuestro código relevante juntos, que es algo que demostré nuevo en el módulo uno. Como dije de nuevo en el módulo uno, esta es una de las principales ventajas de la API de composición. El hecho de que nos permita agrupar todo nuestro código relacionado, ya sean propiedades de datos, métodos, propiedades computadas, relojes, ciclo de vida, ganchos, etcétera. Vamos a comentar este ejemplo de API de Opciones aquí. Agregaremos una propiedad calculada a nuestro código API de composición. Ahora para crear una propiedad calculada, sí necesitamos importar el método computado desde la vista. Simplemente podemos empezar eso a nuestra entrada aquí, comas computadas. Y ahora vamos a configurar una propiedad calculada que determina si el contador es extraño o par. Y luego espacie esto en la página. Primero, acabemos de configurar el narco después este div con todos nuestros botones y el contador, mucha etiqueta de párrafo, y solo agregaré el texto. Este contador es extraño. Hola, vamos a hacer que esta palabra sea impar dinámica usando nuestra propiedad informática. Yo lo guardaré. Desplazemos un poco hacia abajo. Y de nuevo, podemos crear nuestra propiedad de computación en cualquier lugar que queramos. Supongo que tiene sentido colocarlo después un objeto reactivo sin datos. Para crear una propiedad calculada, solo necesitamos disparar el método computado. Dentro de eso, sólo tenemos que pasar en un método como este. Entonces tenemos que devolver algo. Para poder hacer uso de esta propiedad de computadora, necesitamos asignarla a una constante o a una variable. Entonces asignaré esto a una constante llamada impar o par. Uy, escribí eso mal. Extraño o par. Podemos usar el operador restante para determinar si un número es impar o par. Por lo que sólo podemos hacer IF y luego acceder a nuestros conteos. Por lo que sólo podemos hacer recuentos de conteo de puntos de datos. Si conteo de puntos de datos de contador, el resto dos es igual a 0. En otras palabras, si dividimos nuestro valor de cout por dos y obtenemos el resto, bueno, si es un número par y lo dividimos por dos, entonces el resto será 0. Y sabemos que el número es parejo. Si este es el caso, entonces podemos volver parejos. De lo contrario. De lo contrario sólo podemos volver extraño. Ahora en realidad podemos simplemente deshacernos de esto más si queremos sentir que en realidad nunca llegará a esta línea. Si esta primera línea es cierta, me desharé de la palabra else en Guardar que esta propiedad calculada ya está lista para usar en nuestra plantilla. Saltaré al mercado que acabamos de empezar este párrafo. Quita la palabra impar, un extraño doble rizado llaves, solo da salida a nuestra propiedad calculada impar o par. Ahorra eso. Podemos ver que el consejero es 0 y dice que este contador es parejo. Lo aumentamos en uno. Y dice descuentos o es extraño. Lo configuramos en dos y es incluso de nuevo, etc. 20. Una nota sobre los filtros: Si te estás preguntando cómo hacer filtros con V3 en la API de composición, bueno, en realidad se han eliminado de V3. Si solo Google ve tres filtros en broma a esta página desde la guía de migración, podemos ver que en realidad se han eliminado. En vista de, podríamos agregar un objeto filtros a nuestra exportación predeterminada. Y podríamos crear un filtro que aceptara el valor y luego devolvería algo más. Y luego podríamos usar ese filtro en nuestra plantilla simplemente agregando una tubería seguida del nombre del filtro. Si nos desplazamos hacia abajo hasta el a3x, actualización, se eliminan los impulsos, ya no se soportan. En cambio, recomendamos reemplazarlos con llamadas a métodos o propiedades computadas. Ahora bien, esto no es un gran problema porque podemos lograr fácilmente la misma funcionalidad que un filtro mediante el uso de propiedades o métodos calculados. Hecho, lo que hemos hecho aquí con este extraño o incluso es algo así como un filtro. Estamos tomando un valor y dando salida a algo basado en ese valor. Pero una de las cosas a mano de los filtros de paredes, podríamos hacer fácilmente un filtro global, usarlo en toda nuestra aplicación. Entonces digamos que teníamos una app que mostraba moneda en muchas páginas diferentes. Podríamos crear un filtro que convertiría un número en una cadena de moneda formateada con un dólar al inicio y tal vez algunas comas para separar los ceros. No obstante, si V3 podemos lograr lo mismo creando una propiedad computada o un método para hacer que esa propiedad o método computado sea global mediante el uso de composable. Y entonces podemos usar fácilmente esa funcionalidad todos modos, yo dentro de nuestra app. Y aprenderemos más sobre esto más adelante en el curso cuando cubramos composable. 21. Reloj: Los relojes nos permiten esencialmente ver una propiedad de datos reactiva y hacen algo cada vez que cambia. Solo recordemos cómo lo hicimos con la API de opciones. Así que voy a mover aquí este comentario de cierre. Digamos que teníamos un método de datos. Dentro de eso teníamos una propiedad de recuento establecida a 0 inicialmente. Y entonces queremos ver este recuento y digamos hacer algo cuando llegue a un valor en particular, donde tendríamos que agregar una opción de reloj, objeto para exportar. Y luego dentro de eso, podríamos agregar un vigilante para ver cómo estos cuentan así. Podríamos crear un método llamado count. Podemos pasar en dos parámetros, el nuevo contar con el viejo recuento. Entonces podemos hacer algo cada vez que el recuento cambia, podríamos hacer algo como si cuentas es igual a 20, entonces podríamos alertar mensaje. Nuevamente, esto significaba con la API de opciones que todos nuestros relojes tienen que agruparse dentro de este objeto de reloj. Y esto significaba que estos relojes suelen estar muchas, muchas líneas de código alejadas los datos reales con los que están trabajando. No obstante, con la API de composición, podemos configurar nuestros relojes en cualquier lugar nos guste dentro de nuestra sección de script, lo que significa que podemos agrupar fácilmente relojes con sus datos relevantes. Solo voy a dejar caer este comentario de cierre y colocarlo en la parte inferior de la sección de guiones de nuevo, hagamos esto. El API de composición forma menos configura un vigilante, que es nuestros recuentos y nuestros dispara una alerta cuando alcanza los 20. Para usar un vigilante, sí necesitamos importar el método de reloj desde la vista. Y tiene sentido colocar a nuestro vigilante después de los datos que vamos a estar viendo. Entonces colocaremos ese golpe para crear el vigilante. Solo queremos disparar el método de reloj. El primer parámetro debe ser el elemento de datos reactivos que vamos a ver si nuestro consejo estaba en un ref, como const conteos igual a ref así, entonces sólo podríamos pasar en cuenta el primero parámetro. Si bien dado que nuestro contador está en un objeto reactivo, realidad es una propiedad de datos anidada. Y en realidad no podemos hacer recuento de puntos de datos de consejero. Eso no va a funcionar. Entonces tenemos que usar un getter en su lugar para realmente agarrar esta propiedad de datos anidados para nosotros. Y podríamos hacer eso como para que solo podamos hacer paréntesis y luego un símbolo de flecha, y luego solo podemos agregar la propiedad de datos anidados que queremos agarrar, que es datos de consejeros, conteo de puntos. Y luego para el segundo parámetro agregamos un método, paréntesis y luego flecha llaves rizadas. Y de nuevo, podemos acceder aquí al nuevo valor y al antiguo valor. Tan nuevos conteos, conteos antiguos. Simplemente me deshago de este recuento REF que agregamos. Y así deberíamos poder bloquear estos ahora, un cierre de sesión, nuevo recuento, guardar eso, volver a cargar la página. Y si cambiamos nuestro contador, podemos ver que nuestro vigilante está siendo despedido y podemos ver nuevo recuento uno en la consola. Y cada vez que cambie, vigilante será despedido de nuevo. Vamos a mostrar alertas si nuestro contador golpea 20. Simplemente podemos hacer si el nuevo recuento es igual a 20, alerta. Camino a seguir. Lo lograste a 20. Ya que no estamos usando el viejo conteo, no necesitamos realmente declararlo aquí, así que me desharé de eso y lo guardaré. Y veamos si eso está funcionando. Por lo que ojalá cuando lleguemos a los 20, decimos una alerta. 22. Gooks de ciclo de vida: montado [módulo 6]: Los ganchos del ciclo de vida nos permiten ejecutar código en diferentes etapas del ciclo de vida de nuestros componentes. Podemos ejecutar código cuando se monta un componente, como en cuando se carga en el navegador. O podemos ejecutar código cuando está desmontado como descargado desde el navegador. Y solo recordemos cómo usamos ganchos del ciclo de vida en la API de Opciones. Voy a desplazarse hacia abajo a la sección de guiones de nuevo. Apenas cogió el comentario de cierre y pégalo en la parte superior. En la API de Opciones, añadiríamos ganchos como este. Para agregar un gancho montado, por ejemplo, simplemente añadiríamos un método montado a nuestra exportación predeterminada como esta. Entonces podríamos hacer cosas. Cuando se carga el componente. Podríamos añadir un gancho desmontado como este. Hacer cosas cuando el componente se descarga desde el navegador. Y ahora vamos a meter aquí un par de registros de consola. Console.log montado y console.log en montado y guardar eso. Y esto seguirá funcionando por cierto, realidad podemos combinar la API de composición con la API de opciones. Ya verás si vuelvo a cargar la página, podemos ver montado siendo bloqueado en la consola. Y si dejo la página, se puede ver desmontado siendo bloqueado porque nuestra vista de inicio se ha eliminado del navegador. No obstante, no recomendaría usar tanto la API de composición la API de opciones al mismo tiempo. Número uno, hace que nuestros componentes realmente desordenados e inconsistentes. Y el número dos es difícil de comunicar entre las diferentes secciones de guiones. Por ejemplo, en nuestro código API de opciones, no podemos acceder a las propiedades de datos que están en la etiqueta de script API de composición. Pero de todos modos, porque con la API de opciones, solo podíamos agregar un gancho de cada tipo, un gancho montado, y otro en gancho montado. Esto significaba que a menudo la necesitamos para agrupar mucha lógica no relacionada por completo en estos halcones. Pero en la API de composición no podemos tantos ganchos como nos guste, tantos ganchos montados como nos guste, y tantos ganchos desmontados como nos guste. Y podemos colocar esto en cualquier lugar que queramos dentro de nuestra sección de guiones. Vamos a comentar esta sección de script de API de Opciones. Nuevamente. Agreguemos todos los montajes que engancha a este componente. Lote estos en orden de ejecución. El primero es el gancho de montaje antes, que se disparará justo antes el componente se cargue en el navegador. Para hacer esto en la API de composición, acabamos de pensar en un método llamado antes de montar. Y luego pasamos un método a este método, podemos pegar todo nuestro código aquí que queremos disparar antes de que se monte el componente. Así que acabo de cerrar sesión antes y luego voy a duplicar esto. Y a continuación tenemos el gancho desmontado para agregar así. Entonces tenemos el R&B para gancho desmontado. Entonces antes de desmontar. Por cierto, solo estoy haciendo aquí una selección múltiple manteniendo presionada la tecla Alt, seleccionando los textos, manteniendo pulsada la tecla Alt y luego seleccionando los otros textos. Por último, tenemos el gancho desmontado. Para esto, agregamos un método llamado desmontado. Para utilizar estos ganchos, sí necesitamos importarlos desde la vista. Así que voy a hacer una selección múltiple aquí y seleccionar todos estos nombres de métodos y copiarlos. Y salta a nuestra importación, agrega una coma y solo pega los adentro. Y luego solo voy a volver a unir esto presionando Cambio de comando y pagar para mostrar la paleta de comandos. Creo que el atajo es diferente en Windows, solo disparando el comando join lines. Entonces acabo de empezar algunas comas entre estas. Vamos a guardar eso y ver si está funcionando. Volveré a cargar la página. Y sí, podemos ver encendido antes de montar ser bloqueado y luego en montarlo siendo bloqueado. Y si saltamos a la página sobre, podemos ver en antes en Mount estar bloqueado y en desmontado siendo bloqueado. Una cosa a saber es que no hay ganchos creados o antes creados en la API de composición. Y eso es porque el código que ponemos en el nivel raíz de las etiquetas de script será efectivamente disparado en este punto. Entonces todo este código en nuestra sección de script se está disparando efectivamente antes de que se cree el componente. 23. Gooks activados: Veamos cómo no podemos activarlo en ganchos desactivados con la API de composición. Hacemos esto de la misma manera. Simplemente duplicaré esto en gancho montado. Acabamos de añadir en el gancho activado, acabamos de cerrar sesión en activado. Y luego para el gancho desactivado, solo usamos el desactivado. Nuevamente, necesitamos añadir estos a nuestra importación o parece que VS Code se agrega automáticamente. Estos, solo añádelos aquí. Si no lo hizo. Ahorraré que ahora estos ganchos solo se dispararán si nuestros componentes se mantienen vivos. Eso significa que el componente sigue funcionando en segundo plano, incluso cuando no se muestra en la página. Para ello, necesitamos envolver nuestro componente de vista de enrutador en etiquetas keep-alive. Queremos saltar a app.vue. Queremos envolver esta vista de enrutador en etiquetas keep-alive. O bien podemos usar el caso del tablero como este. Podemos usar el caso Pascal. Utilizaré el caso Pascal ya que eso es lo que estamos usando en todas partes en nuestro AP. Solo quiero pegar esta vista del router dentro de estas etiquetas. Ahorra eso. En realidad lo hacemos de manera diferente en V3 porque vemos esta advertencia aquí. vista del router ya no se puede utilizar directamente dentro de la transición o mantener vivos los apoyos de ranura en su lugar. Y nos da un pequeño ejemplo aquí de cómo hacer eso. Podemos simplemente copiar esto, pegarlo por aquí. Ahora debería mantener vivos todos los componentes que se cargan en esta vista del router que se cargan en esta vista del routery deberíamos ver que están activados y desactivados el trabajo de Hook en. Entonces lo guardaré y recargaré la app. Podemos ver en activado ahí. Si dejamos esta página, déjame ver el on desactivado esperanza siendo despedido también. Ahora no quiero mantener las páginas vivas en esto arriba, así que solo voy a deshacer todo lo que cambiamos en app.vue para que solo tengamos nuestro componente de vista del router por su cuenta. Y entonces lo guardaré. 24. Gooks actualizados: También tenemos los ganchos actualizados que se disparan cada vez que cambia nuestra plantilla. Entonces, por ejemplo, cada vez que cambie nuestro consejo, agreguemos esos ganchos a esta vista de casa dot componente Vue. Y esto está un poco desordenado ahora. Por lo que voy a quitar todos estos ganchos y quitar las entradas de estos ganchos. Va a agregar un on antes de actualizar el gancho. Acabamos de cerrar la sesión antes de la actualización. Este gancho se disparará justo antes de que se actualice la plantilla. Por lo que si hacemos clic en este botón en los cambios de contador, esto se disparará justo antes de que se actualice la plantilla. Y luego tenemos el gancho actualizado el cual será disparado en el punto en que se actualice la plantilla y acabaremos cerrar la sesión en la actualización. En realidad, mi BOD no es todo actualizado, todo está actualizado. Así que sólo arreglaré eso. Nuevamente. Tenemos que importar estos. A continuación, se tire de encendido antes de las actualizaciones en, actualizado desde la vista y guardar eso. Si recargamos, entonces se puede decir que estos ganchos no se disparan cuando se carga el componente por primera vez. Si hago clic en este botón y el contador aumenta y nuestra plantilla cambia, entonces podemos ver estos ganchos siendo disparados primero el encendido antes del gancho de actualización, seguido del gancho actualizado. 25. ¡Múltiples ganchos!: Antes de seguir adelante, solo demostremos agregando múltiples ganchos del mismo tipo. Sólo voy a quitar estos ganchos actualizados. Voy a quitar las entradas. Retire los ganchos naturales. Digamos que queremos hacer algunas cosas relacionadas con título de nuestra app cuando se carga el componente por primera vez. También queremos hacer algunas cosas relacionadas con nuestro contador cuando el componente se carga por primera vez también. Por lo que sólo podemos parar a halcones sin derretir. Vamos a importar sobre montado desde la vista. Y luego después de nuestro título de aplicación, no podemos ser desmontados gancho. Acabo de cerrar sesión, hacer cosas relacionadas con Título. Y luego digamos que queremos hacer algunas cosas relacionadas con el contador cuando se monta el componente, entonces podríamos querer añadir eso aquí abajo. Por lo que sólo podemos pegar en otra charla. Simplemente cambiaré el texto en este registro para hacer cosas relacionadas con contador. Ahorra eso. De esta manera con la API de composición, podemos mantener todos nuestros ganchos junto con el código relacionado, especialmente si usamos comentarios para separar nuestras diferentes secciones de código. Lo que a menudo hago a la vista componentes es agrego un comentario de bloque como este. Simplemente agregaré un comentario para nuestras aportaciones. Entonces mueva esto hacia arriba. Sangría. Y luego mucho, un pequeño comentario para el título de nuestra app. Pondremos las llamadas al título de la aplicación y el gancho desmontado relacionado con ella debajo de este comentario. Y luego mucho comentario de un bloque topo para el cabildo. Colocaré todo el código relacionado con nuestro consejo debajo de este comentario. Y lo guardaré. A pesar este componente no es especialmente complicado, ya estamos empezando a ver el beneficio que nos da la API de composición en términos de mantener por completo nuestra lógica relacionada, en lugar de dispersada a través de las diversas opciones, que tenemos que hacer cuando estábamos utilizando la API de opciones. 26. Directivas personalizadas locales [Modulo 7]: Se sigue Vue.js. Directivas fuera de la caja como modelo V, V show, v-if, etcétera Pero podemos crear nuestras propias directivas personalizadas para agregar funcionalidad a elementos para que podamos hacer algo a un elemento una vez que sea sido creado o montado. Ejemplo clásico es crear una directiva cuyo enfoque automático es un campo de entrada. Así que vamos a crear un ahorro directo que también enfoca esta importación en nuestra vista de casa. Voy a saltar a la vista de casa en vistas de fuente y vista de casa dot view. Y recordemos cómo hacemos esto. La forma de las opciones API. Voy a descomentar el código API de opciones. El API de opciones. Tuvimos que añadir una opción de directivas, que es un objeto. Podríamos colocar todas nuestras directivas aquí. Vamos a crear una directiva de enfoque automático. Por lo que podríamos llamar a este autofocus. Y de nuevo, fijamos esto a un objeto. En el interior aquí podemos añadir cualquier gancho que lo queramos como creado o montado. Entonces vamos a añadir un gancho montado. Podemos obtener acceso al elemento pasando este parámetro l. Y entonces podemos hacer algo con ese elemento. En este caso, queremos enfocarlo para que podamos hacer L dot focus. Yo lo guardaré. Ahora deberíamos poder utilizar esta directiva en nuestra aportación. Y sólo tenemos que prepararnos y sea cual sea nombre que hayamos usado aquí con v dash. Si salto hasta la entrada que está aquí, deberíamos poder simplemente agregar v dash, también enfocarnos. Esto todavía debería funcionar a pesar de que estamos usando opciones API aquí. Si vuelvo a cargar la página ahora, puedes ver que también está enfocada esta entrada con la API de opciones. Todas nuestras directivas locales tuvieron que colocarse dentro de estas directivas objetos, que de nuevo, como sigo diciendo con la API de opciones, esto a menudo lleva a que el código relacionado se disperse por muchas líneas de código. Considerando que con la API de composición, podemos crear una directiva local en cualquier lugar dentro de una función de configuración. Vamos a comentar nuestras opciones código API y hacer esto de la forma API de composición. Acabo de comentar esta sección de script en Júpiter a nuestra sección de scripts API de composición. En el botón, voy a añadir otro de estos comentarios de bloque llamado directivas. Para crear una directiva, necesitamos crear un const. El nombre de esto causado tiene que ser camelcase y tiene que comenzar con una minúscula v Podríamos llamar a esto V también foco. Cualquiera que sea el nombre que utilicemos aquí determinará el atributo que realmente usamos, aunque se convertirá en caso de guión como este. V autofocus, CamelCase se convierte en v dash autofocus cuando lo usamos en la plantilla. En fin, queremos establecer esto a un objeto. Dentro aquí podemos añadir un gancho de ciclo de vida como el creado. Y lo configuramos como una propiedad que se establece en un método como este. Podemos entonces hacer algo con el elemento al que hemos añadido esta directiva en este halcón creado. Y también podemos utilizar todos los demás libros, como antes de montar y montar antes de la actualización. Actualizado antes en montura. Montado. Pero para esto, utilicemos nuevamente el gancho montado. Podemos simplemente usar el mismo código que hicimos antes para enfocar el simple enfoque de l dot. Ya hemos añadido esta directiva a lo simple. Con suerte esto debería estar funcionando ahora, simplemente recargaré la página y sin embargo sigue siendo auto enfocando esta entrada. Pero ahora tenemos la libertad de colocar esta directiva local en cualquierlugar esta directiva local en cualquier que queramos dentro de nuestra sección de guiones. 27. Directivas personalizadas globales: momento sólo podemos usar esta directiva V autofocus en este componente particular, home view dot view. Si queremos poder usar esta directiva toda Sarah en diferentes componentes, entonces podemos tomar nuestra directiva, ponerla en su propio archivo, y crear una directiva personalizada global. Así que saltemos al Explorador de Archivos y crearemos una carpeta donde podamos colocar nuestras directivas personalizadas. Entonces voy a crear una nueva carpeta dentro la carpeta fuente llamada directivas. Voy a crear un nuevo archivo. Y vamos a conseguir este archivo el mismo nombre que nuestra directiva. Así V autofocus dot js. Y por cierto, si tienes problemas con tu espaciado tabulador aquí, porque todos estos archivos en este proyecto que creamos espacio de hábitat de dos espacios. Es posible que al crear un nuevo archivo se establezca en cuatro espacios porque ese es el valor predeterminado en el código VS. Si quieres arreglar eso, solo tienes que ir al código y preferencias y ajustes. Simplemente cambia esta configuración de tamaño de grifo a dos. Y es posible que necesites simplemente eliminar este archivo y recrearlo también, este archivo de enfoque automático V. Pero de todos modos, pasemos nuestra directiva a este archivo. Saltaré de nuevo a la vista de puntos de vista de casa. Ahora sólo podemos cortar este código. Yo también borraré el comentario. Podemos saltar al autofocus JS y solo pegarlo en. Y todo lo que necesitamos hacer para poner esto a disposición de otros archivos es exportar esta constante. Por lo que sólo podemos empezar a exportar y ahorrar eso. Ahora si saltamos de nuevo a toda la vista de punto vista, ahora podemos importar esta directiva y utilizarla. Simplemente saltaré a la sección de impulsos. Importar esta directiva. Simplemente podemos hacer importar autofocus desde slash directivas slash v autofocus. Ya tenemos directiva añadida a este impulso, por lo que ojalá esto debería estar funcionando. Voy a volver a cargar la página en todavía está trabajando en, excepto que esta es ahora una directiva global que podemos usar en cualquier lugar. Solo para demostrar que agreguemos un área de texto a nuestra página sobre. Así que vamos a abrir las vistas Acerca de la página Fuente sobre bu.edu, mucha área de texto. Después de este rumbo. Entonces necesitamos agregar sección de configuración de script, una gran cantidad de comentarios para las importaciones. Entonces después de eso, solo copiaré el código de importación de vista propia vista de punto, pegaré eso ahí dentro, y ahora deberíamos poder usar eso aquí también. Entonces vamos a añadirlo a esta área de texto v autofocus. Guarda esa recarga. Y sin embargo también está funcionando aquí. Ahora tenemos una directiva global práctica que podemos usar en cualquier parte de nuestra app. 28. Vue Router - $route - parte 1 [módulo 8]: Veamos cómo hacemos las cosas de manera diferente con Vue Router en la API de composición. Ahora puedes recordar el dólar rutas objetos que podríamos usar para acceder a cosas como la ruta de ruta actual o parámetros de ruta en la API de Opciones. Bueno, todavía podemos usar este dólar objetos raíz en nuestra plantilla cuando estamos usando la API de composición. Para demostrar eso, vamos a crear una página de detalles de publicación que acepte un parámetro de ID. Y luego usaremos el objeto de raíces de dólar para mostrar este ID en esa página de detalles de publicación. Pero antes de hacer eso, vamos a cambiar esta página Acerca a una página de posts, que más adelante agregaremos una lista de publicaciones a. Queremos saltar a nuestro archivo router en el router fuente index.js. Y por cierto, voy a mostrarte cómo configurar el router de vista desde cero más adelante en el curso cuando creamos nuestras bolas de notas. Pero en este proyecto todo eso ha sido configurado para nosotros. No nos preocupamos, te estaré mostrando cómo configurar todas estas cosas desde cero. Puedes entender lo que está pasando aquí un poco mejor si aún no estás familiarizado con Vue Router. Pero de todos modos, vamos a ajustar esto Acerca página y convertirla en una página de publicaciones. Entonces voy a cambiar el camino para recortar publicaciones. Cambiaré el nombre a posts y me desharé de este montón de comentarios. Y vamos a importar un componente llamado Posts view en su lugar. Yo lo guardaré. Esto romperá nuestra app porque está buscando este componente que no existe. Así que vamos a abrir nuestro explorador, saltar a vistas y cambiaremos el nombre de esto sobre Vue dot view a posts view dot view ahora está funcionando de nuevo. Y ahora vamos a actualizar nuestros enlaces de navegación en la parte superior. Estos están en app.vue, source app.vue. Queremos cambiar este segundo enlace de enrutador para ir a las publicaciones de barras de ruta. Y queremos cambiar el texto a publicaciones también. Guarda eso, ahora deberíamos poder llegar a argumentar la página de publicaciones. Así que ajustemos un poco esta página de publicaciones. vistas de origen y las publicaciones vista superior cambiarán esta clase en este div raíz, dos publicaciones, y cambiaremos el texto en este encabezado, dos publicaciones también. Ahorra eso en un poco. Vamos a añadir una lista de enlaces a algunos posts. Bueno, en primer lugar, vamos a configurar una ruta para nuestra página de detalles de posts. Entonces saltaremos de nuevo a index.js en la carpeta del router. Y voy a añadir una coma después esta ruta de posts y luego duplicar eso. Y vamos a establecer el camino para publicar detalle. Y queremos esta ruta, y queremos que esta ruta acepte un parámetro llamado ID. Entonces para hacer eso, solo podemos agregar slash colon ID al final. Esto significa que si vamos a slash posts slash detallado ID uno, entonces el valor del parámetro ID que estamos pasando a esta ruta será ID1. Y luego cambiaremos el nombre para publicar detalle, y cambiaremos el componente para publicar vista de detalle, vista superior. Y lo guardaremos de nuevo, esto romperá nuestra app porque este componente no existe. Así que vamos a duplicar el componente de vista de este post haciendo clic derecho en él y usando el comando duplicado de archivo o directorio, que viene de la extensión de acción duplicada que instalamos anteriormente en el curso. Vamos a duplicar esto y lo llamaremos post vista de detalle. Voy a quitar todo dentro las etiquetas de script se eliminan. Área de texto. Cambiaré esta clase a detalle postdoc. Cambie el texto del encabezado a página de publicación, guárdelo, vuelva a cargar la página, y eso no funciona. Y eso es porque cambio el nombre de este componente incorrectamente. Se debe publicar vista detallada vista de punto. Vamos a cambiar el nombre de eso otra vez, solo pensé la cosmovisión al final. Vamos a agregar algunos enlaces a esta página de posts para que podamos llegar a nuestra página de detalles de post y luego usar las rutas del dólar. Objeto para acceder a nuestro parámetro de ruta. 29. $route - parte 2: Agreguemos algunos enlaces a nuestra página de detalles de post. En esta página de posts, voy a saltar a vistas en la vista de publicaciones, vista de puntos. Y después de éste, voy a añadir una lista desordenada. Dentro de eso voy a añadir una etiqueta LI. Y luego dentro de eso voy a agregar un enlace de enrutador al enlace del router. Podemos usar el caso del tablero como este, o podemos usar el caso Pascal. Y voy a usar el caso Pascal. Dentro de la salida, el texto publica una respuesta, establece la ruta para este enlace del router. Simplemente podemos agregar un atributo dos y establecer eso a nuestro camino. Y si saltamos de nuevo a nuestro router fuente de archivos router index.js, la ruta que especificamos aquí fue slash, post barra detallada y luego el ID. Así que voy a establecer esto para atribuir a barra barra de detalle de post id uno. Y luego voy a duplicar este LI dos veces, cambié el valor de dos en el segundo enlace a id2 al final, y luego publicar dos, y luego el tercero, lo cambiaré a tres y luego publicaré tres. Vamos a guardar eso y podemos ver un enlace a esos posts. Empecemos un poco de margen en la parte inferior. Mucho. Una sección de estilo que está encaminado, lo que significa que cualquier estilo que pongamos aquí, solo se aplicará a este componente en particular. Así que solo agregaré algún margen inferior a la UL, margen, inferior 30 pixeles. Ahorra eso. Veamos si estos enlaces están funcionando. Y sin embargo estamos en nuestra página de publicaciones o en la página de detalles de la publicación. Podemos ver slash id uno en la barra de direcciones. Y si volvemos y hacemos click en el segundo, permítanme decir slash id2 al final, ahora podemos usar los objetos de rutas de dólar en nuestra plantilla obtener acceso a este parámetro ID que estamos pasando. Vamos a abrir la página de detalles de la publicación, detalle de publicaciones, vista de puntos. Deja salir un párrafo debajo de este rubro. Y sólo tendré que el texto muestre el contenido de las publicaciones con ID de esmalte, agregue llaves dobles rizadas, raíz de dólar, params de punto, y luego el nombre de nuestro parámetro, que es ID dot ID aquí. Vamos a salvar eso. Y podemos decir mostrar el contenido de los posts con un ID de id2 aquí. Si volvemos y hacemos click en el tercer post, entonces vemos ID3. Y salgamos rápidamente del botón Atrás aquí, agregaré otro párrafo en un enlace de router con los textos de vuelta, solo para agregar aquí un poco de flecha a la izquierda, vamos a usar una entidad HTML, LT, que suena por menos de y luego punto y coma. Y luego estableceremos los dos valores en este enlace del router para reducir las publicaciones. Guardar que el botón Atrás no está funcionando. Se puede ver que el acceso a los objetos de rutas de dólar en nuestra plantilla es exactamente el mismo en la API de composición como lo es en la API de Opciones. Pero, ¿cómo podemos acceder a la información de nuestra ruta en nuestra sección de guiones? Bueno, en la API de Opciones, podríamos simplemente hacer este acceso root dot dollar, toda la misma información. Podríamos usar esto dentro de los métodos computados las propiedades son ganchos del ciclo o en la API de composición, no tenemos acceso a esto. No tenemos acceso a ver instancia en todas las opciones porque no tenemos ninguna opción. En la API de composición, necesitamos usar view threes, usar route composable en su lugar. 30. useRoute: No podemos usar esta raíz de dólar de puntos en la API de composición. Si guardo eso, vemos un error y nuestros brotes. Entonces vamos a quitar eso. Haga esto de la forma API de composición. Agreguemos un botón a esta página que dispara un método cuando hacemos clic en él. Entonces después de esta etiqueta de párrafo entre estos dos párrafos, vamos a agregar un div. Dentro de eso. Voy a añadir un botón con el texto show post ID. Cuando hacemos clic en esto, queremos mostrar un LIT que muestre el ID del post. Agreguemos un manejador de clics a esto. Por lo que haré clic en Mostrar publicado. Vamos a crear mucho este método. Este método como const, const, show posts I equivale a un método. Por ahora vamos a cerrar la sesión show post ID para asegurarnos de que esto esté funcionando. Guarda ese click en el botón y podemos decir show post ID en la consola. Por lo que ahora en este método queremos mostrar una alerta que muestre el ID del post. Y de nuevo, no podemos hacer esta raíz de dolar punto. Por lo que necesitamos importar vistas nueva ruta de uso composable. Por lo que necesitamos importar eso primero. Así importación uso ruta desde vista router. Tenga en cuenta que estamos reportando esto desde Vue Router y no desde la vista. Para obtener acceso a esa composable, necesitamos asignarlo a una variable o constante en el View Team recomienda utilizar la ruta del nombre. Por lo que muchos conceptos llaman colono de ruta igual a paréntesis de rutas de Estados Unidos. Ahora podemos acceder a esta composable utilizando esta constante de ruta. Y por cierto, me estaré metiendo en composable es con más detalle más adelante en el curso, incluyendo cómo crear una composable personalizada y cómo importar componible desde bibliotecas de terceros como view uso. Pero de todos modos, ahora podemos usar esta constante de ruta igual que usaríamos este dolar dot out. Dentro de este método, vamos a mostrar una alerta. Voy a usar backticks para generar una cadena de plantilla aquí, y acabaremos de mostrar el ID de este post es Colab. Entonces permita tirantes de dólar y rizados para que podamos sacar algo aquí y queremos mostrar nuestro parámetro de ruta ID. Entonces en lugar de este dot dollar roots dot params dot ID, ahora podemos simplemente hacer ruta dot params dot ID. Salvemos eso y veamos si eso está funcionando. Haga clic en el botón. Vemos la alerta. La idea de este post es ID3, y eso está funcionando. Vamos a probarlo en un post diferente, publicar para hacer click en el botón. La idea de este post es id2. 31. useRouter: En la API de Opciones, podríamos manejar el router programáticamente usando este router dot dollar. Por ejemplo, si quisiéramos enviar al usuario a la página de inicio, podríamos hacer este dot dollar router dot push y luego el path slash. Y eso los empujaría de nuevo a la página de inicio. Pero de nuevo, en la API de composición, no tenemos acceso a esto. Por lo que necesitamos usar el enrutador estadounidense composable de Vue Router. Deshaznos de esta línea. Importará el enrutador de uso desde el router de vista. Y de nuevo, necesitamos asignar esto a una constante que típicamente llamamos router. Entonces duplicaré esta constante aquí, cambiaré a enrutador, y cambiaré esto para usar paréntesis de enrutador. Ahora vamos a añadir otro botón a nuestra página después de este div con el primer botón. Agreguemos otro div. Y luego otro botón con el texto ir a casa. En tres segundos. Agreguemos un manejador de clics a este botón. Haga clic igual a ir a casa en tres segundos. Y ahora vamos a crear este método después de este método. Entonces const, ir a casa en tres segundos es igual a una función de flecha setTimeout en código VS. Si acaba de escribir en set, puede elegir este fragmento de función setTimeout, que permitió que los extranjeros. Sólo voy a deshacerme del punto y coma y pondremos el tiempo de espera a 3 mil milisegundos tres segundos. Después de este tiempo de espera de 3 segundos, queremos enviar al usuario a la página de inicio. Y así que en lugar de hacer este dot dollar router dot push, paréntesis slash, ahora podemos simplemente hacer el router dot push slash. Ahora vamos a salvar eso. Haga clic en el botón y espere tres segundos. Volvió a la página de inicio. Si queremos empujar al usuario basado en el nombre de la ruta en lugar de esta ruta explícita por nombre, me refiero al sin nombre especificado aquí en cada una de nuestras rutas en index.js en la carpeta router, entonces podemos hacer eso también. Podemos simplemente cambiar esto a router dot push y luego un objeto y su nombre. Y luego el nombre de la ruta a la que queremos ir, que es casa minúscula. Guarda eso y mira si eso funciona. Haga clic en el botón. Espera tres segundos. Sí, eso funciona también. O si queremos enviar al usuario a una página de detalles de publicación en particular con un ID en particular, entonces podríamos hacerlo también. Así que voy a saltar de nuevo a la página de detalles de la publicación, un pequeño botón. Simplemente duplicaré este div y botón. Y digamos que queremos enviar al usuario a la primera publicación. El puesto con ID de ID uno. Cambiaré el texto dentro de este botón para ir a la primera publicación, cambié el nombre del método para ir a las primeras publicaciones. Vamos a crear ese método. Simplemente duplicaré éste. Cambia el nombre para ir a la primera publicación, eliminar el código dentro de ese método para enviar al usuario a la página de detalles de la publicación para los posts con un ID de uno, solo podemos hacer router dot push y luego un objeto, establece el nombre para publicar detalle. Y luego podemos agregar un objeto params y establecer el ID para guardarlo. Actualmente estoy en la página de detalles de la publicación de los posts con un ID de tres. Así que vamos a hacer clic en esto, ir al botón de primera publicación y ahora estamos en la página de detalles de la publicación para los posts con un ID de uno. 32. Listas (v-for) [módulo 9]: Las listas que utilizan la directiva V4 funcionan exactamente de la misma manera en la API de composición que antes. Pero sólo para demostrar rápidamente eso, vamos a mostrar esta lista de publicaciones dinámicamente usando una ira de datos y AV para dirigido. Así que vamos a saltar a nuestra página de publicaciones. Así vistas de fuente, vista de publicaciones, vista de puntos. Y vamos a configurar un href donde podamos colocar una serie de posts. Así que voy a añadir aquí un nuevo comentario, que acaba de decir, vamos a configurar una constante llamada posts, va a establecer eso igual a un href. Necesitamos importar el método ref desde la vista. Pondré esto en la parte superior aquí. Importar desde la vista colocará una matriz dentro de este href. Y cada elemento de la matriz será un objeto con un par de propiedades. Por lo que agregaremos una propiedad ID y estableceremos esta primera para agregar una propiedad title y estableceremos esta para publicar una. Y luego mucha coma después de este objeto, duplica esto dos veces. Acaba de cambiar los identificadores a dos en el título publicar dos para el segundo I M. Y luego para el tercer ítem, estableceré el ID en ID3, estableceré el título para publicar tres, y guardaré eso. Esta matriz de publicaciones ya está disponible en nuestra plantilla. Así que lo utilicemos para escupir a estos aliados con nuestros enlaces de router dinámicamente usando la directiva V fall, voy a deshacerme de todos los Aliados y las rutas están vinculadas. Entonces, aparte de la primera, salvo eso, agreguemos una directiva VFR a este LI. Así v4 publicar mensajes. Esto va a recorrer nuestro array posts ref. A medida que está pasando por un bucle, cada objeto estará disponible en el placeholder que especificaba aquí, post. Y también necesitamos agregar una propiedad clave, colon k es igual. Y queremos poner esto a algo que va a ser único. Entonces vamos a poner esto a posdoc ordenado. Ahorra eso. Y ahora podemos ver tres posts siendo escupidos. Entonces vamos a dar salida aquí el título del post, que va a ser un título postdoc. Y luego actualicemos el enlace y los dos prop también. Entonces usaré una cadena de plantilla agregando algunas garrapatas atrás alrededor de esto, deshacerme de ID1 y escupir esto dinámicamente agregando llaves rizadas de dólar. También tenemos que sumar un colon al inicio de este prop. Y luego dentro de los tirantes rizados dará salida el ID que está en el postdoc ordenado. Ahorra eso, recarga. Si hacemos clic en la Roma de la posguerra, el ID de una página, gratis, clic en Publicar para ejecutar el ID de dos páginas. Se puede decir que no hay absolutamente ninguna diferencia cuando se trata de listas bajo directiva VFR en la API de composición. 33. Plantilla Refs: Hablemos de refs de plantilla. Ahora, no me refiero a las refs de datos que hemos estado usando para algunos de nuestros datos reactivos. Quiero decir, cómo de vuelta en la API de Opciones podríamos agregar un atributo href a un elemento, darle un nombre. Y entonces podríamos acceder a este elemento en el componente está montado y luego hacerle algo para que tenga enfocarlo o fuera de clase o averiguar el ancho de los elementos o algo así. Sólo voy a quitar esto. Ahora, digamos que queremos acceder a este elemento de encabezado es H2. Queremos averiguar el ancho de este elemento. Podríamos necesitar el ancho de este elemento para propósitos de diseño receptivo o algo así. Por ejemplo, podríamos necesitar cambiar el tamaño del texto, también delgado si el elemento es demasiado ancho o no lo suficientemente ancho. En la API de composición, seguimos siendo el atributo href al elemento que queremos apuntar. Y puedes usar cualquier nombre que te guste. Pero el estándar aceptado es usar CamelCase con la palabra ref al final. Podríamos configurar esto, título ref, ahorrar. ¿ Cómo podemos acceder a este elemento cuando se carga este componente? Desplazemos hacia abajo hasta el título de nuestra aplicación aquí. Ahora en la API de Opciones, podríamos simplemente hacer este dot dollar refs, dot a title ref. Y entonces podríamos acceder al elemento y luego hacer algo con él, averiguar su ancho o lo que sea. No obstante, en la API de composición, no tenemos acceso a este dólar puntual Fs, por lo que esto no va a funcionar. Lo que tenemos que hacer en su lugar es configurar un const con el mismo nombre que nuestro ref, título ref. Por lo que const título href es igual. Y entonces tenemos que configurar esto un poco confusamente, un href de datos. Establecemos esto en un método ref y establecemos el valor inicial a saber. Y de nuevo, vamos a necesitar importar este método ref desde la vista. Entonces vamos a añadirlo a nuestra importación aquí, coma áspera, y ahora podemos acceder a este elemento por este href. Valor de esta constante salió componente está montado en esta montaña, tomó lo que podemos hacer es afuera, por lo ref, valor de punto, todavía necesitamos usar valor de punto para refs plantilla. Esto debería darnos acceso a este elemento h2. Vamos a cerrar esto por ahora. Consola dot log. Ahorra eso. Y podríamos decir rumbo siendo encerrado en la consola. Si quisiéramos obtener el ancho de ese elemento, solo podríamos empezar el ancho de desplazamiento de puntos hasta el final de este. Solo voy a cerrar la sesión una cadena de plantilla con el texto. El título son llaves rizadas de dólar, y luego pegaré en ese código otra vez afuera. Así valor de punto ref, ancho de desplazamiento de punto. Y luego después de eso solo agregaré píxeles ancho y guardaré esa recarga. Y podemos ver aquí dice que el círculo exterior tiene 318 píxeles ancho para un cambio de tamaño libre nuestra recarga AP. Y ahora dice que el título tiene 453 píxeles de ancho. 34. nextTick: Siguiente tick nos permite esperar hasta que el DOM se haya actualizado y luego hacer algo. Por ejemplo, si hacemos clic en el botón Plus aquí, nuestro contador se actualiza, en el DOM se actualiza. Nuestra siguiente garrapata nos permite esperar hasta que se haya completado la actualización lock dom antes de que hagamos otra cosa. Digamos que cuando aumentemos nuestro contador, queremos esperar hasta que haya finalizado la actualización dom. Antes de hacer algo más, voy a saltar hacia abajo a nuestro método de contador aumentado, que está aquí en la API de Opciones. Podríamos hacer este dolar punto siguiente tick y luego pasar una devolución de llamadas a eso así, y luego hacer algo después de que el DOM se haya actualizado. No obstante, esto no funcionará en la API de composición. Si guardo eso y cambio el contador verá un error en la API de composición. Necesitamos importar el siguiente método tick desde la vista. Así que me desplazaré hacia arriba a nuestra declaración de importación y apenas empiezo al siguiente tick hasta el final. En lugar de este dólar de puntos Alexis, sólo podemos hacer el siguiente tick. Entonces pasa una devolución de llamadas a eso. Entonces podemos hacer algo cuando el DOM se haya actualizado. Entonces haz algo cuando contador actualizado en el punto, guarde eso. Y si cambiamos el contador, podemos ver que estar bloqueado o ya que el siguiente tick es una función asíncrona, también podemos usar async await para hacer esto. Para ello, sí necesitamos hacer de nuestro contador aumentado una función asíncrona como esta agregando aquí la palabra clave asíncrona. En lugar de este método con la devolución de llamadas, simplemente me desharé de eso. Ahora podemos simplemente hacer esperar. Siguiente garrapata. Mentir que si guardamos eso, aumentar el contador, podemos decir que eso sigue trabajando en. 35. Teleport : parte 1: V3 nos trae una nueva característica llamada teletransporte. Ahora esto no es específicamente una característica de la API de composición. En realidad podemos usarlo tanto con la API de composición la API de opciones exactamente de la misma manera dentro de cualquier vista tres arriba, sin embargo, quería cubrirlo de todos modos, ya que es una característica tan increíble, nos permite mover un elemento de su lugar predeterminado en el volcado a otro lugar del perro, generalmente fuera de nuestra vista hacia arriba como fuera de este div con un id de app, que es la raíz elemento de nuestra visión hacia arriba o teletransportarlo a otro div, que es un hijo del cuerpo. Esto es realmente útil para cosas como modales, que podrían no mostrarse correctamente si los mostramos en algún lugar profundamente anidado dentro de nuestro árbol DOM de aplicaciones. Ahora esta página de inicio es bastante complicada ahora y también lo es la página de posts. Entonces vamos a crear una nueva página donde podamos jugar con teletransporte. Así que voy a crear una nueva vista en fuente y vistas llamada modals view top view, etiqueta de plantilla dentro de una gran cantidad de div con una clase de modales. Y entonces solo iniciaré una etiqueta H1 con los modales de texto. On Guardar que necesitamos configurar una nueva ruta para esto. Por lo que queremos ir a fuente y router index.js. Vamos a duplicar esta ruta de mensajes. Entonces cambiaré la ruta a modales de barras, cambiaré el nombre a modales, cambiaré la ruta al componente a vista modales, vista superior. Y vamos a guardar eso y para que podamos llegar fácilmente a esta página. Agreguemos un enlace a nuestra navegación, que está en la fuente app.vue. Y agreguemos un nuevo enlace de enrutador después de este enlace de inicio. Así que voy a duplicar eso. Establezca la ruta para slash modales, establezca el texto en modales también. Ahorra eso. Y veamos si podemos llegar allí. Y sin embargo ahora estamos en esta página modales. Así que vamos a saltar a esa vista modales ver punto. Vamos a crear un botón que al hacer clic mostrará un modal. Entonces después de este encabezamiento, una gran cantidad de botón con el texto muestran modal. Ahorra eso. Y agreguemos algún marcado para un modal con algún texto en un botón que lo impusiera. Entonces mucha div con una clase de modal dentro de eso, mucho H1 encabezando con el texto, esto es modal. Y luego mucho párrafo con algunos Lorem Ipsum en VS Code, podemos emitir algún Lorem Ipsum con solo escribir en lorem y golpear Enter en esta abreviatura Emmet. Y estoy mucho botón debajo para esconder el modal. Y acabo de poner el texto Ocultar modal y guardar eso. Y agreguemos algunos estilos para darle a esto un color de fondo y algún relleno. Así que mucha etiqueta de estilo. Apuntar a la clase modal. Establezca el fondo en beige, establezca el relleno en diez píxeles. Ahora pongámonos a pagar renta por determinar si se muestra o no este modelo. Muchas de nuestras etiquetas de configuración de script, mucho comentario, que acaba de decir modales, mucha constante llamada show modal y establece eso igual a un ref con un valor inicial de false. Entonces si esto es falso, entonces no mostraremos el modal. Y si es cierto, entonces vamos a mostrar el modal y necesitamos importar ref desde la vista. Agregaré aquí otro comentario, que solo dice insumos. Entonces vamos a importar desde la vista. Y eso permitirá que la directiva v-if a este div con la clase de modal. Dividiré los atributos en eso con la extensión de atributos HTML divididos que instalamos anteriormente. V-if show modal, salva eso y podemos ver desaparecer el modal. Y si cambiamos este valor a verdadero, déjame verlo volver a aparecer. Volvamos a ponerlo en falso. Cambiemos el valor de esto sin botones. En este botón show modal, agregaremos un controlador de clics, que establece show modal a true. Y eso está funcionando. Y luego en este botón modal alto, agregaremos otro controlador de clics, que establece show modal a false, guardarlo, ver si eso está funcionando y eso está funcionando. Ahora podemos mostrar y ocultar este modal. 36. Teleport : parte 2: Ahora vamos a añadir algunos estilos a este modelo para que sea absolutamente posicionado en pantalla completa. Entonces voy a bajar a la sección de estilo, establecer la posición a absoluta, establecer la izquierda en 0, la parte superior a 0, establecer el ancho al 100% y la altura al 100%. Ahorra eso. Se puede decir que esto no ha funcionado. Simplemente estiraré esto un poco. Ahora la razón por la que no se ha trabajado es porque este elemento modal tiene un elemento ancestro que tiene su posición establecida en relativa. Vamos a abrir el volcado y elegimos nuestro elemento root, este div con un id de app. Mira hacia fuera los estilos que podemos ver esto tiene una posición de relativa. Esta es exactamente la razón por la que a menudo necesitamos usar el componente de teletransporte. Y verás si arrastramos este div para ser un hijo directo del cuerpo, entonces el modal es de pantalla completa, aunque no se ve del todo bien porque creo que necesitamos agregar un índice Z para asegurarnos se sienta encima de todo. Así que sólo voy a saltar de nuevo al estilo y nuestro índice deseado de uno. Guarda eso, recarga la página, muestra el modal y arrastraré esto a la raíz de nuestra página. De niño del cuerpo. Dice que esto ahora mira como queremos que lo haga. Ahora podemos usar el componente de teletransporte para teletransportar este div con la clase de modal para subir aún más árbol DOM, como lo hemos hecho aquí en las herramientas dev. Para ello, todo lo que tenemos que hacer, solo recargaré eso es rodear el elemento que queremos teletransportar, que es este div. En un componente de teletransporte. Simplemente seleccionaré el div y lo moveré al teletransporte. Y luego agregamos un atributo to el cual configuramos a un selector CSS para determinar dónde queremos diferenciar este elemento dos. Si solo queremos hacer de esto un hijo directo del cuerpo, entonces podemos simplemente poner esto en cuerpo. Yo lo guardaré. Y si recargamos, he escrito ese mal ahí que debería ser teletransportado, Di eso otra vez y recargar. Y ya verás si mostramos el modal ahora, ahora mira cómo lo queremos, porque el componente de teletransporte lo ha teletransportado para ser un hijo directo del cuerpo. O si no queremos diferenciar esto al cuerpo y queremos enviarlo a un div en particular, y podemos hacerlo también. Simplemente saltemos a nuestra página HTML en la raíz de nuestro proyecto, index.html. Lote de div después de este div con un ID de aplicación, que es donde nuestra vista arriba está viviendo allí para la clase de modals dash container. Ahorra eso. Y ahora si saltamos de nuevo a tus modales ver punto view, podemos saltar a este componente de teletransporte y simplemente cambiar el contenedor de dos prop, dos modales de punto y guardar esa recarga. Muestra el modal. Se está moviendo el modal a los modales container div que acabamos de empezar. obstante, no se ve bien porque a todos los elementos de esta app se les está dando una posición de relativa por este estilo asterisco aquí, tal vez solo necesitemos anular este estilo para este modales contenedor div. Podríamos hacer esto en nuestro CSS base. Si vamos a los activos fuente y CSS base, podemos simplemente saltar hacia abajo al fondo. Destino son modales, contenedor. Contenedor. Establezca la posición en inicial. Ahorra eso. Ahora se ve bien. 37. Componentes Child [módulo 10]: Repasemos los componentes de un hijo en este módulo. Ya que mucho ha cambiado con respecto a los componentes secundarios cuando usamos la API de Composición, sobre todo cómo manejamos apoyos emite el nuevo valor del modelo y actualizamos valores modales patrón componentes dinámicos proporcionar inyectar. Empecemos convirtiendo este modal en un componente hijo. Voy a crear un nuevo archivo en la carpeta de componentes fuente. Por alguna razón no tengo esa carpeta, así que solo la crearé componentes. Ahí dentro. Voy a crear un nuevo archivo llamado vista de punto modal. Mucho las etiquetas de la plantilla ahorran eso. Y ahora vamos a saltar a nuestra vista modales en vistas de fuente y modales ver vista de punto. Cortemos nuestro código modal incluyendo el componente de teletransporte, y luego peguemos eso en nuestra plantilla en la vista modal de puntos. Por ahora solo eliminaré la directiva v-if. Este manejador de clics en el botón modal alto, ya que no tenemos estos datos aquí mismo. También pondré los estilos de modales bu.edu. Pondré toda la etiqueta de estilo, pegaré eso en modal dot Vue. Ahorra eso. Ahora vamos a importar este model.py de dos componentes en modales view dot view. Solo recordemos cómo hicimos esto con la API de opciones. Se permiten algunas etiquetas de script más son el valor predeterminado de exportación. En la API de Opciones, primero tuvimos que importar nuestro modal de entrada de componentes desde slash components slash modal dot view. Y luego en nuestra exportación predeterminada, tuvimos que agregar un componente, los objetos sobresalen componente ahí. Entonces seríamos capaces de utilizar este componente en nuestra plantilla. Esto aún debería funcionar porque recuerda, podemos combinar la API de opciones con la API de composición. Aunque no recomendaría que si pegamos este componente en la página modal y ponemos ese cubo v-if. Por lo que VF muestran modal. Ahorra eso. Haga clic en el botón. Podemos ver nuestro modal en la API de Opciones, estos componentes objetos siempre fue un poco de dolor en el libro porque cada vez que agregamos un nuevo componente hijo o cambiamos el nombre de un componente, siempre tenemos que mantener este componentes objetos actualizados o en la API de composición. No tenemos que preocuparnos por eso. Todo lo que tenemos que hacer es importar nuestro componente y podemos usarlo. Sólo voy a comentar este código. Hagamos esto de la forma API de composición. Y todo lo que tenemos que hacer es sólo importar este componente. Simplemente copiaré esta declaración de importación, pegaré aquí, y eso es todo lo que tenemos que hacer. Entonces guardaré esa recarga. Ahora podemos ver que nuestro modal y alto modal incorporado no está funcionando, pero no te preocupes, lo arreglaremos más adelante. 38. Arreglar vistas de carga perezosos: Antes de seguir adelante, me he dado cuenta que hay un retraso muy leve. La primera vez que cargamos la página de modales en la página de posts, no siempre la veo, pero a veces lo hago. Es un poco molesto. Así que sólo voy a arreglar eso. Voy a saltar a fuente y router index.js. Y la razón por la que esto está sucediendo es porque somos perezosos cargando estos componentes. En otras palabras, cuando cargamos un componente como este en lugar de puerta importante de antemano, solo lo estoy agregando así. Entonces el componente sólo se carga en memoria en el punto en que visitamos esa ruta, lo que sí resulta en un retraso muy leve cuando cargamos esos componentes por primera vez. Para solucionar esto, podemos simplemente importar explícitamente todos estos componentes de antemano, igual que lo hemos hecho con la vista de punto de vista de inicio. Así que sólo voy a duplicar esta línea y ponerme a la vista tres veces. Y luego haré una selección múltiple en la vista de casa. Sustituyo eso por vista modales. Y luego en la siguiente, haré una selección múltiple y la reemplazaré por postes. Para el último, reemplazaré eso por vista de detalles de publicaciones. Entonces solo voy a hacer una selección múltiple en estos tres nombres manteniendo presionado la tecla Alt. Y luego voy a hacer selección múltiple aquí abajo en cada uno de estos métodos que son perezosos cargando esos componentes, solo pega en esos nombres de componentes. Yo lo guardaré. Ahora ya no deberíamos ver ningún retraso y todas nuestras páginas deben cargarse agradable y rápidamente. Incluso la primera vez que les pegamos. 39. Ranura: En su mayor parte, slops, funcionan exactamente de la misma manera en la API de composición. Sólo para demostrar que si saltamos a la vista modal de puntos, en lugar de codificar duro este contenido en este componente w modal. Vamos a pasar esto hacia abajo desde los modelos de componentes padre ver vista de punto usando una ranura. Entonces voy a saltar a la vista modal de puntos. Corta este párrafo y en cambio solo coloca aquí una ranura y guarda eso. Y luego en modales view dot Vue pegará el párrafo aquí que cociné antes. Vamos a guardar esa jukebox que son modales página click en el botón. Y sin embargo ese contenido está consiguiendo a través de usar nuestra ranura y también llamadas ranuras funcionan de la misma manera también. Voy a saltar a la vista modal. Y digamos que queremos pasar el título modal hacia abajo usando una ranura con nombre. Simplemente eliminaré este texto y agregaré otra ranura aquí. daremos a éste un nombre de título. Ahorra eso. Ahora deberíamos poder pasar este título abajo usando una ranura con nombre. Entonces para hacer eso, solo podemos agregar una etiqueta de plantilla aquí escribiendo el concepto que queremos enviar usando esta ranura, así que mi nuevo título y luego a nuestra etiqueta de plantilla de apertura, necesitamos agregar ranura v dash, colon, y luego el nombre de la ley estadounidense, y lo nombramos el título. Título. Veamos si eso está funcionando. Sí, allí podemos ver mi nuevo título. Y también podemos taquigrafía este v dash slot colon bit usando un símbolo hash en su lugar. Entonces voy a decir que ver si eso sigue funcionando todavía. Todavía trabajo en. Puedes ver que todo esto funciona exactamente de la misma manera que antes con la API de opciones, lo único que funciona de manera diferente es cómo accedemos programáticamente a nuestros datos de slots. Ahora si queremos acceder a nuestros datos de slots en la plantilla, todavía podemos hacerlo de la misma manera que antes. Entonces después de esta ranura aquí, sólo voy a añadir una etiqueta pre. Aún podemos acceder a nuestros datos de slots usando la palabra clave dollar slots, igual que podríamos en la API de Opciones. Entonces si quiero dejar caer los datos relacionados con La ranura del título, solo puedo hacer dólar slots dot title, y luego paréntesis. Ahorra eso. Y podemos ver todos los datos relacionados con nuestra ranura siendo escupir. No obstante, si queremos acceder a estos datos programáticamente en nuestra sección de script, que probablemente sea algo que rara vez necesitarás hacer. A pesar de que sí encontré lo que necesitaba para hacer esto una vez en mi presupuesto a que estoy trabajando en ellos. Tenemos que hacer esto un poco diferente en la API de composición. Entonces muchas de nuestras etiquetas de configuración de script. Entonces en la API de opciones, si quisiéramos acceder a estos datos de slots, podríamos simplemente hacer este dot dollar slots dot title. En la API de composición, necesitamos importar nuestra composable desde la vista, que es la componible de los EE.UU. slops. Lo que podemos hacer en su lugar es importar, usar ranuras desde la vista. Y entonces podemos asignar esta composable a una constante. Entonces const slots es igual a usar ranuras paréntesis, y entonces podemos acceder a nuestros datos de slots usando esta constante de slots. Si quisiéramos volver a conseguir este título, podríamos simplemente hacer slots dot title, paréntesis. Y vamos a cerrar la sesión. Console.log. Guarda eso, muestra el modal y ahora podemos decir que nuestros datos de slots se escupen en la consola. Nuevamente, esto no es algo que vas a necesitar muy a menudo, pero hay algunos casos raros en los que lo harás. Antes de seguir adelante, simplemente eliminemos todo en la sección de guiones aquí. Y vamos a quitar esta etiqueta pre que hemos añadido también. 40. Accesorios: Veamos cómo manejamos apoyos usando la API de composición. Ahora la forma en que pasamos los apoyos hacia abajo del componente de prendas de vestir a un componente hijo es exactamente la misma que antes. Es sólo la forma en que recibimos apoyos en el componente hijo del componente padre lo que ha cambiado. Entonces vamos a saltar a la vista modales, vista de puntos. Y digamos que queremos pasar este título abajo usando un prop en lugar de usar una ranura con nombre. Así que vamos a quitar esta etiqueta de plantilla aquí. Voy a dividir los atributos en este modal, y en su lugar pasaremos esto abajo usando un prop, para que podamos agregar un prop llamado title y luego pasar nuestro título. Entonces mis paréntesis de título modal vía prop. Ahorra eso. Ahora vamos a saltar a la vista modal de puntos, y ahora necesitamos recibir este prop en la API de Opciones. Simplemente iniciaré otra sección de script, la exportación predeterminada. El API de opciones. Agregamos una opción de utilería. Podemos establecer esto en una matriz o un objeto. Podríamos colocar nuestros apoyos aquí. Podríamos añadir un título prop, colono a2, un objeto. Y podríamos establecer el tipo a cadena, porque esto va a ser una cadena. Si queremos, podemos establecer un valor predeterminado en caso no se haya especificado el prop en el componente padre. Por lo que podríamos establecer el default para conocer el título especificado. Ahorra que esto todavía debería funcionar como recuerde, podemos combinar las opciones de ancho API, la API de composición. Así que me desharé de esta ranura aquí. Y en cambio solo salida. Mira llaves rizadas y el título. Ahorra eso. Y veamos si podemos ver el título en nuestro modal. Sin embargo podemos ver el título que mi título modal vía prop. No obstante, lo hacemos un poco diferente usando la API de composición. Vamos a comentar esta sección de guiones. Haremos esto de la forma API de composición. Entonces primero solo voy a agregar uno de estos comentarios de bloque, que dice prompts. Para recibir nuestros apoyos usando la API de composición, necesitamos crear una constante llamada props y establecer eso igual a un nuevo método llamado define prompts. Una cosa a tener en cuenta es que a diferencia de la mayoría de los métodos V como Raf y reactivo, y computado, etc, en realidad no necesitamos importar este método de apoyos definido desde la vista. Simplemente está disponible automáticamente. Y ahora sólo podemos definir nuestros apoyos de la misma manera dentro de estos paréntesis. Podemos pasarlos como una matriz como esta. O si quieres conseguir más específico y pasar en el tipo y el default, etcétera de nuestros apoyos, entonces podemos pasar en un objeto. En cambio. Podemos definir nuestros apoyos de la misma manera. Sólo voy a copiar este título prop que definimos antes. Pega eso aquí y guarda eso. Y ojalá eso debería estar funcionando. Ahora, solo volveré a cargar la página, mostrar el modal. Y sin embargo podemos ver que el prop está pasando. Y vamos a asegurarnos de que nuestro valor predeterminado esté superando si no especificamos el componente padre. Entonces saltaré a modales ver dot Vue. Acaba de quitar este título prop y guardarlo. Y sí, podemos decir que no hay título especificado y simplemente lo desharé y lo pondré de nuevo y lo guardaré. Una cosa a tener en cuenta es que cuando usamos unos apoyos en nuestra plantilla, ya sea podemos simplemente usar el nombre de roble recto del prop. Tenemos aquí título, y también podemos usar puntales dot title, ahorrar. Se puede ver que estos dos funcionan. Sólo pondré esto de nuevo a solo título. No obstante, si queremos acceder a nuestro prop en nuestra sección de script, y entonces sí necesitamos usar esta constante de apoyos. Entonces si trato de consola log title, entonces vemos un error. No obstante, si consolamos log props dot title, entonces podemos ver el prop siendo bloqueado. Antes de seguir adelante, simplemente eliminemos este registro de consola y guardemos eso. 41. Emites: Actualmente no podemos cerrar este modal. Entonces, ¿cómo podemos conseguir este botón cuando hacemos clic en él para cerrar este modal? Bueno, este botón está en la vista modal de puntos. Y si saltamos a sus modales de componente parent view dot view, tenemos este show modal ref. Esto es determinar si el modelo se muestra en arriba. Entonces cuando hacemos clic en este botón en el componente hijo, necesitamos de alguna manera establecer este href modal, que está en el componente paralelo, vuelta a false para ocultar el modal. Y una forma en que podríamos hacer esto es emitiendo un evento personalizado. Permítanme hacer clic en este botón y después escuchando ese evento en el componente padre, en este componente modal. Y luego cuando recibimos ese evento, solo podemos establecer mostrar partes modales de false, aquellas que ocultan el modal. Así que vamos a saltar a la vista modal de puntos y emitiremos un evento personalizado cuando hacemos clic en este botón. Ahora en la API de Opciones, acabaré de descomentar este código. Por un segundo. Tuvimos que agregar una opción de emisión establecida a una matriz. Y tuvimos que declarar aquí nuestros eventos personalizados, como hide modal. Y no seríamos capaces evento personalizado desde nuestra plantilla, pero declaramos nuestros límites manera diferente con la API de descomposición. Así que acabo de comentar esto otra vez. Lo que tenemos que hacer, acabo de empezar otro comentario de bloque aquí, que dice emite. Lo que tenemos que hacer en la API de composición para declarar nuestros límites es crear una constante llamada emit. Establezca eso igual a un método llamado define. Emite. Un poco como el método definido. Nuevamente, es probable que encuentre el método de utilería, no necesitamos importar este método desde la vista. Y luego solo pasamos una matriz a eso donde podemos declarar todos nuestros eventos personalizados. Declaremos y emitamos llamado Hyde modal. Ahora podemos emitir evento ocultar modal desde cualquier lugar de nuestra plantilla. Ahora podemos simplemente saltar a este elemento botón y agregar un manejador de clics y luego usar el dólar emita método y luego simplemente omitir este método personalizado ocultar modal. Se puede ver la forma en que usamos las emisiones en nuestra plantilla es exactamente de la misma manera que antes. Es sólo la forma en que las declaramos en nuestra sección de guiones lo que es diferente. Si guardo eso, ahora podemos escuchar este evento en la vista de modales de componente padre, vista de puntos. Así que vamos a saltar a eso. Si saltamos a este componente modal, solo podemos pensar que escondería modal, que es el nombre que usamos aquí y aquí. Y ahora podemos hacer algo cuando recibimos ese evento y solo queremos volver a poner show modal a false. Simplemente podemos hacer mostrar modal es igual a falso. Así que ahorremos eso y veamos si está funcionando. Recargaré la página, haga clic en el botón y luego haga clic en el botón de altura. Podemos decir que ahora está funcionando. Es así como emitimos un evento directamente desde nuestra plantilla. Pero y si necesitamos emitir un evento programáticamente desde nuestra sección de scripts, bueno, con la API de opciones, solo podemos hacer este dot dollar emitir y luego emitir el evento como este. No obstante, eso no va a funcionar en la API de composición. En cambio, tenemos que utilizar esta constante emita. Pero antes de hacerlo, cuando hacemos clic en este botón, en lugar de emitir el evento directamente desde la plantilla, activemos un método local en su lugar. Vamos a desencadenar un método llamado handle Wilson click. Entonces agregaré otro comentario de bloque aquí, botón de manejar click configura ese método. Vamos a asegurarnos de que eso esté disparando. Cuando hacemos clic en el botón. Eso es disparador y sal admitir nuestro evento desde aquí, todo lo que tenemos que hacer es emitir y luego el nombre de nuestro evento personalizado. Así que esconde modal. Salvemos eso y esto debería estar funcionando ahora. Entonces voy a recargar, mostrar el Modal onclick. En modal alto, vemos desaparecer el modal. 42. model/model/Valor: momento cuando hacemos clic en este ocultar modal atornillado, activamos este método de clic botón manejado. Y luego ahí emitimos este evento personalizado hi modal. Después en el componente padre escuchamos ese evento de cliente y luego configuramos show modal de nuevo a false. Pero en realidad podemos simplificar esto accediendo a este show modal ref directamente desde el componente child modal dot view y cambiándolo directamente de nuevo a false. Aquellos que eliminan la necesidad de configurar eventos personalizados y luego emitir esos eventos en la API de Opciones, podríamos hacer algo como esto con el modificador fregadero. Pero en la API de composición, podemos hacer esto con el modelo V, el nuevo modelo value prop, y los eventos de valor del modelo de actualización. En primer lugar, saltemos los modales bu.edu. En lugar de esta directiva v-if agregará la directiva de modelo av, y vamos a establecer eso a este href show modal para que podamos conseguir este componente hijo acceso a este show modal ref, oops, he escrito en V modal que debería ser modelo V. Yo lo guardaré. Ahora si saltamos a model.fit, podemos obtener acceso a la propiedad de datos que se está pasando con el modelo V usando un nuevo prop especial llamado valor del modelo. Y por lo general declaré este apuntalamiento en la parte superior de mis objetos de gotas. Así que mucho de eso aquí. Por lo que acabamos de modelar volumen. Podemos establecer el tipo si nos gusta. Esto va a ser un booleano porque voy a mostrar el ref modal es un booleano. Por lo que vamos a establecer el tipo 2 mil millones, establecerá el default a false. Vamos a salvar eso. Ahora vamos a utilizar este prop de valor modal para determinar si se muestra el modal. En lugar del v-if que teníamos antes, el componente padre. Podemos simplemente saltar a este div con una clase de modal fuera de la directiva v-if y establecer eso al valor del modelo vf. En otras palabras, si este show modal ref es falso, entonces se va a pasar con el modelo como falso y luego recibido como valor modal. Y así el valor modal será falso en este div con una clase de modal no se mostrará. No obstante, si show modal es trig, eso va a ser transmitido con botella V y luego recogido por este prop de valor modelo, donde seguirá siendo cierto. Y luego mostraremos el modal. Así que ahorremos eso y veamos si está funcionando. Voy a hacer clic en el botón todavía podemos ver el modal. Sabemos que esto se está pasando correctamente. 43. update:modelValue: Con el fin de ocultar este modal, todavía estaba activando este método de clic de botón de mango. Cuando hacemos clic en el botón, entonces estamos emitiendo estos eventos costales de alto modal y estoy escuchando ese evento y luego configurando show modal de vuelta a false. Pero en realidad podemos manipular el href que estamos pasando aquí mostrar modal directamente mediante el uso del nuevo evento de valor del modelo de actualización. De esta manera podemos deshacernos de este evento modal alto y eliminarlo de este componente. Así que vamos a saltar de nuevo a la vista modal de puntos. En lugar de emitir este evento personalizado, emita un nuevo evento llamado update colon model volume que necesitamos para pasar el valor que queremos cambiar el valor modal dos. Por lo que queremos cambiarlo a falso. Lo que esto va a hacer es cualquier valor que estamos pasando con el modelo V va a cambiarlo directamente a cualquier valor que especifiquemos aquí. Si guardo eso, ahora, muestro el modal, hago clic en el botón modal alto. Podemos ver que el modal está oculto. Ahora sí vemos una advertencia en la consola aquí, valor del modelo de actualización de eventos, pero no se declara en la opción emite ni como problema de valor modal de actualización. Solo necesitamos agregar este evento a nuestro array emite aquí, así, actualiza el valor modal de colon. Esto debería deshacerse de esa advertencia. Muestra el modal y esconde el modal. Y ya no vemos la advertencia. Dado que ya no estamos usando este evento modal alto, podemos simplemente eliminarlo de esta matriz. Ahorra eso. Y si salto de nuevo a la vista modales, vista de punto ya no necesitamos escuchar este evento modal de ocultar ya que ahora estamos manipulando el vector modal show usando el valor modal de actualización de n. Por lo que sólo podemos deshacernos de esto ahora. Ahorra eso. Ahora veamos si esta es la obra. Y, sin embargo, sigue funcionando. Saltemos de nuevo a la vista modal de puntos. También podemos emitir si tuviera actualización de valor del modelo directamente de nuestra plantilla también. Entonces, en lugar de disparar este método aquí, solo voy a comentar este método, pero dejarlo ahí como referencia. Podemos simplemente cambiar este manejador de clics al usar el método de emit dólar. Simplemente emite actualizaciones valor del modelo de dos puntos y luego establece el valor en el que queremos configurarlo, que es false. Ahorra eso. Y vamos a ver si eso todavía está funcionando, eso todavía lo funciona también. pueda ver que el uso del valor modal y valor del modelo de actualización simplifica masivamente nuestra comunicación hijo a padre y, a menudo, elimina la necesidad configurar eventos personalizados y luego escuchar aquellos personalizados eventos. 44. Componentes dinámicos: parte 1: Los componentes dinámicos nos permiten cambiar el componente que se está utilizando en algunas partes particulares de nuestra app. Demostremos esto creando una versión oscura de nuestro modelo, que podemos cambiar en esta página modales bu.edu basada en una casilla de verificación. Ahora en una app del mundo real, si quisieras tener modales que fueran tanto claros como oscuros, entonces lo mejor que hay que hacer sería solo tener un componente modal y cambiar los estilos usando apoyos. Lo que estamos a punto de hacer no es exactamente una mejor práctica, pero es una forma agradable y fácil de demostrar los conceptos de componentes dinámicos. En primer lugar, hagamos que nuestro componente modal en modales view dot view, un componente dinámico. Entonces todo lo que tenemos que hacer es cambiar esto a un componente. Componente. Me aseguraré de que tanto las etiquetas de apertura como de cierre hayan sido renombradas. Y luego solo agregamos un S prop. Entonces colon es, y acabamos de establecer eso al componente que queremos mostrar aquí. Solo queremos mostrar nuestro componente modal. Por lo que sólo podemos usar el nombre modal. Establezca esto en modal salvo eso. Debería estar funcionando igual que antes. Voy a hacer clic en show modal. Y sin embargo todavía podemos ver el modal. Todavía podemos ocultarlo, excepto ahora podemos cambiar realmente el componente que se muestra aquí simplemente cambiando esto es prop, programáticamente. Entonces antes de crear nuestra visión oscura de nuestro modal, solo agreguemos una casilla de verificación a la página que podemos usarla para alternar si mostramos o no modales claros u oscuros. Entonces después de nuestro rumbo, voy a añadir un div. Y luego dentro de eso voy a añadir una etiqueta. Y luego dentro de eso voy a poner los textos muestran modales oscuros, signo de interrogación. Y luego después de que los textos permitieron una entrada, establece el tipo en casilla de verificación. Vamos a ahorrar eso para asegurarnos de que se vea bien. Y sí, eso se ve bastante decente. Ahora vamos a establecer así pagar ref, que combinamos a esta casilla de verificación. Así que desplácese hacia abajo a nuestra sección de guiones en la parte superior de este show modal href. Agreguemos un nuevo ref llamado Chau Doc modales que equivalen a un rap con un valor inicial de false. Y usaremos este gráfico para determinar si mostramos modales de punto o modales de luz. Entonces ahora vamos a encontrar este href a nuestra casilla de verificación, que está aquí. Simplemente podemos configurar el modelo V para mostrar modales doc. Ahorra eso. Solo para asegurarme de que esto esté funcionando, voy a agregar una etiqueta pre después de este div y solo salida show doc modales. Ahorra que podamos decir es falso inicialmente. Y si verificamos, la casilla de verificación se establece en true. Y si desmarcamos, se vuelve a falso antes de crear nuestro punto modal, simplemente eliminemos esta etiqueta pre en Guardar. 45. Componentes dinámicos: parte 2: Vamos a crear nuestro modal oscuro. Así que saltemos a la vista modal de puntos. Sólo voy a eliminar estos comentarios sobre éste también. Ahorra eso. Y ahora vamos a duplicar este módulo componente a componentes fuente en modal w. Duplicar con la extensión de acción duplicada nombrará esta vista modal doc dot. Cambiemos la clase en este div a dash modal dark. Desplácese hacia abajo hasta los estilos, cambió la clase aquí a dash modal dark en lugar de un fondo beige. Vamos a establecer esto en hash 333, que será de color gris oscuro. Y luego pondremos el color, el color del texto a blanco y guardaremos eso. Solo para reiterar, si quisieras tener modales que fueran claros y oscuros en un mundo real arriba, entonces esta no sería la mejor manera de hacerlo porque estamos duplicando mucho de nuestro código aquí. Sería mejor solo tener un solo componente de punto modal Vue, que luego podemos pasar un prop para decir un prop llamado dark. Y luego si recibimos ese prop, entonces agrega una clase diferente al modal para darle diferentes estilos. Solo estoy usando esto como ejemplo para demostrar componentes dinámicos, pero no como un ejemplo de mejores prácticas. Ahora vamos a saltar modales vista, vista de punto, y ahora podemos cambiar el componente que se utiliza en este S prop basado en nuestros modales show dot ref. Entonces, antes que nada, necesitamos importar el componente modal oscuro. Duplicaré esta línea, cambiaré eso a doc modal, cambiaré el nombre de archivo aquí a oscuro modal. Lo que podemos hacer en esto es prop. Podemos usar una declaración ternaria if aquí para escupir un componente diferente basado en nuestros modales show dot ref. Entonces podemos hacer si los modales de Chau Doc es cierto, entonces usaremos el componente modal oscuro. De lo contrario, usaremos el componente modal. Así que vamos a salvar eso. Haga clic en el botón Mostrar modal. Vemos la luz modal alta Doc. Marcaré la casilla de verificación que mostró set apareció modales a true. Y deberíamos ver nuestro modal. Ahora, si hacemos clic en el botón, ahí vamos. Ahora podemos cambiar fácilmente de ida y vuelta entre nuestros modales claros y oscuros. 46. Proporción/Inject : parte 1: Vimos cómo pasar datos de un componente padre a su componente hijo directo usando apoyos. Pero y si queremos pasar datos a un componente hijo realmente profundamente anidado, bueno, usando apoyos, necesitaríamos pasar los datos de padre a hijo a hijo y así sucesivamente hasta que alcanzar el componente hijo deseado en esto puede ser una forma muy desordenada de pasar datos alrededor. Y podemos sortear este problema mediante el uso de provide inyectar. Vamos a saltar a nuestro componente raíz app.vue. Sólo vamos a cerrar todo primero y iremos a fuente y app.vue. Digamos que tenemos un objeto reactivo en este componente con algunos datos que queremos pasar todo el camino hacia abajo a este componente modal. En primer lugar, vamos a configurar un objeto reactivo en app.vue. Agreguemos nuestra sección de script, nuestras etiquetas de configuración de script. Digamos que tenemos un objeto reactivo con algunos datos de usuario. Un montón de comentario de bloque aquí, que dice datos de usuario, configura una constante llamada conjunto de datos de usuario que igual a un objeto reactivo. Ahora tenemos que importar reactivo desde la vista. Mucho otro comentario que dice que las importaciones importarán reactivas desde la vista. Y agreguemos algunos datos a estos objetos reactivos de datos de usuario. Digamos que tiene una propiedad de nombre. Vamos a poner eso a Danny y a una propiedad de nombre de usuario, y vamos a poner eso a Dani caudal. Ahorra eso. Y vamos a mostrar estos datos en la esquina superior derecha de nuestra página. Voy a saltar hasta la parte superior de la plantilla. Agregue un div con una clase de datos de usuario que permitan llaves dobles rizadas. Nombre de punto de datos de usuario. Entonces vamos a dar salida también el nombre de usuario. Así que mucho un símbolo en y luego dobles llaves rizadas, luego usa un nombre de usuario de punto de datos. Ahorra eso. Solo pensemos algunos estilos para que esto se vea un poco mejor. Me desplazaré hacia abajo hasta la parte inferior de la sección de estilo. Datos de usuario objetivo div. Estableceremos la posición absoluta, el fondo, beige en la parte superior a 0 para pegarlo en la parte superior, la derecha a 0 también. Entonces lo tenemos en la esquina superior derecha. Estableceré el tamaño de fuente a 12 píxeles, un poco trazando también, cinco píxeles. Ahorra eso. Ahora digamos que queremos pasar estos datos hacia abajo al componente modal usando apoyos. Bueno, en primer lugar, tenemos que pasarlo como un prop a nuestro componente de vista de enrutador, así, los datos de usuario de dos puntos son iguales a los datos de usuario. Ahorra eso, que necesitamos recibir esto en nuestra página modales. Vistas de fuente, modales vista arriba vista. Sólo agregaré aquí un comentario que dice apoyos. Que necesitamos agregar una constante nombrada props, establecer eso igual a definir. Los apoyos pasan en los datos del usuario. Prop. Estableceré el tipo a objeto. Y ahora tenemos que pasar estos objetos de datos de usuario de nuevo hacia abajo al componente modal, que es, Hey, podemos hacer, ir a lo largo de los datos de usuario iguales a datos de usuario, guarde eso. Y ahora tenemos que abrir el componente modal recibido este prop. Tenemos que sumar aquí el prop. Entonces usa un conjunto de datos, el tipo dos objetos. Ahora podemos finalmente utilizar estos objetos de datos de usuario en nuestro modal. Entonces una gran cantidad de div después de este botón aquí. Ahí acabo de poner nombre de usuario es llaves dobles rizadas. Utilice un nombre de usuario de punto de datos. Guardar eso, recargar, mostrar el modal. Podemos ver el nombre de usuario en el modal. Se puede ver que esto se desordena muy rápidamente, especialmente en un mundo real cuando podría tener componentes que están mucho más profundamente anidados. Hecho este componente modal. 47. Proporción/Inject : parte 2: Entonces vimos que no quería pasar datos de app.vue hacia abajo a la vista modal de puntos, tenemos que pasarlo como un prop a nuestra vista del router. Entonces recibe ese prop en vista modales, vista de punto, y luego pasarlo como propaganda a model.py EU y luego recibirlo en w modal antes de que podamos realmente utilizarlo. Este enfoque no es mucho problema. Así que vamos a solucionar este problema usando provide inyect. Entonces primero vamos a eliminar todos los cambios que hicimos aquí con props en la vista model.py. Eliminemos este div que agregamos y también eliminemos este prop de datos de usuario de nuestro objeto de props. Guarde eso, y luego salta a modales ver vista de punto. Elimine esto un prop de datos de usuario del componente, componente, y luego elimine nuestro objeto de utilería. Ahorra eso. Entonces saltaremos a app.vue y eliminaremos este prop de nuestra vista del router, guardaremos esa recarga. Y ahora vamos a utilizar provide para que este objeto reactivo de datos de usuario esté disponible para todos nuestros componentes hijo app.vue, sin importar cuán profundamente anidados estén. En primer lugar, necesitamos importar el método provide desde la vista. Y ahora después de que declaramos estos datos de usuario objetos reactivos, sólo podemos disparar este método de proporcionar. Para el primer parámetro, solo necesitamos proporcionar un nombre de placeholder para estos datos para poder acceder a él en nuestros componentes hijo. Y lo hacemos como una cuerda. Y simplemente le daré a este el mismo nombre que nuestros datos de usuario de objeto reactivo y luego seguiré el segundo parámetro. Simplemente pasamos los datos que queremos poner a disposición, que en este caso es este objeto reactivo UserData. Estableceré el segundo parámetro para usar un dato. Ahorra eso. Y ahora estos datos deberían estar ahora disponibles para todos los componentes hijo de app.use. Ahora no necesitamos hacer nada a la vista de punto de vista del modelo. Podemos simplemente saltar directamente hacia abajo a la vista model.py componente nieto y podemos agarrar estos datos usando inyectar. Saltemos directamente hacia abajo a la vista modal de puntos del nieto. Y ahora tenemos que importar el método de inyectar desde la vista. Comentario ruidoso que dice impulso en la parte superior, solo importará inyectar desde la vista. Y ahora podemos usar este método. Por lo que voy a saltar al fondo de la sección de script hacia fuera un nuevo comentario que dice datos de usuario. Todo lo que necesitamos hacer para agarrar estos datos que se están proporcionando es phi del método objeto. Y pasa el nombre del placeholder como una cadena, que utilizamos en nuestro método Proporcionar, que son datos de usuario. Todo lo que necesita hacer es inyectar datos de usuario para ponerlos a disposición en esta plantilla, sólo tenemos que asignarlos a una constante o a una variable. Por lo que sólo asignaremos esto a una constante con el mismo nombre, datos de usuario así. Y ahora podemos acceder a estos datos con esta constante UserData. Entonces si volvemos a saltar a la plantilla, mucho div después de este botón. Y acabo de poner nombre de usuario es colon, llaves dobles rizadas, y luego usar un nombre de usuario de punto de datos. Guarda eso, recarga, muestra el modal y ahora podemos ver nuestro nombre de usuario. Pero hemos simplificado masivamente nuestros componentes mediante el uso de provide inyect. 48. ¿Qué es un Composable? [Módulo 11]: En este módulo, vamos a aprender sobre composable. En composable son una de las características más emocionantes por venir con FY2013 en la API de composición. Pero, ¿qué es un componible? Bueno, se puede pensar en composable como la composición APIs equivalente a mixins de la API de opciones. Si bien con muchos beneficios añadidos, nos permiten extraer datos y métodos reactivos. Los mantengo separados de cualquier componente en particular para que podamos reutilizar fácilmente esos datos y métodos reactivos a través múltiples componentes sin tener que duplicar código. Aquí tenemos un ejemplo de algún código de un componente de vista usando la API de composición. Y tenemos algún código relacionado con un nombre de usuario. Aquí, tenemos un nombre de usuario data ref para almacenar un nombre de usuario, y luego tenemos una función para actualizar ese nombre de usuario. Entonces digamos que queremos reutilizar este nombre de usuario rref y este método de actualización Nombre de usuario en múltiples componentes. Que sólo podemos extraer estos hacia fuera en una composable, así. Composable es básicamente solo una función y podemos pegar todos nuestros datos y métodos reactivos , relojes, propiedades computadas, etc, en esta función y luego devolver las cosas de esta composable que queremos poner a disposición. Podemos entonces importar esta composable a cualquier componente y luego usar la estructuración para extraer las cosas que queremos. En este caso el nombre de usuario data ref y la función nombre de usuario. Y entonces podemos usarlos en ese componente. Si quieres conocer más detalle sobre los beneficios de composable sobre mix-ins, entonces puedes saltar a este artículo en View skill.io. ¿ Qué es un Vue.js composable? Mucho el enlace a la conferencia. Pero en resumen, los principales beneficios de composable sobre mixins es ante todo, dejan completamente claro de dónde vienen todos nuestros datos y métodos, etc,. Si miramos este ejemplo desde la API de opciones aquí, tenemos un componente que está importando tres mixins diferentes. Y luego estamos usando una propiedad de datos llamada sitio de uno de estos mixins. Pero al mirar este código no es obvio de dónde viene esta propiedad del sitio sin tener que abrir estos mixins y mirar a través de los archivos. tanto que con composable, siempre sabemos exactamente de dónde vienen nuestros datos. Se puede decir en este ejemplo de API de composición, estamos importando tres diferentes composables. Aquí. Estoy agarrando una propiedad de nombre de uno de ellos. Podemos decir claramente que esto viene del producto estadounidense composable. Entonces composable es hacerlo mucho más claro de dónde viene todo. Composable también se reduce el riesgo de nombrar colisiones. Así que de nuevo, tenemos aquí un ejemplo de API de Opciones que está tirando de tres mix-ins diferentes. Ahora si todos estos mix-ins tienen una propiedad de datos llamada name, y luego usamos eso en nuestro componente. Eso sólo va a agarrar la propiedad de nombre del último mixin, que hemos importado. Las propiedades de nombre en los otros dos Mixins serán completamente ignoradas. Composable también nos facilita salvaguardia de nuestros datos reactivos. En otras palabras, hacer que las propiedades de los datos en nuestros objetos de datos sean de solo lectura desde fuera de la mezcla, para que en realidad solo podamos cambiar los datos dentro del mixin. No podemos hacer eso con mix-ins. Lo que tenemos composable. Cuando devolvemos las cosas que queremos exponer de lo composable, podemos exponer valores como de solo lectura para que no se puedan cambiar desde fuera de lo composable, solo de un método que está dentro de lo composable. El último beneficio de la composable es que en realidad podemos utilizarlos como un sistema global de gestión estatal. Por lo que podemos crear efectivamente una tienda componible con un montón de datos y métodos diferentes. Cuando cambiamos las propiedades de datos en esa tienda. Siempre estarán actualizados en todos los diferentes componentes de nuestra app. En tanto que no podemos hacer eso con mix-ins. Si tratamos de hacer eso con mix-ins, entonces los datos siempre se restablecerán para cada componente en el que usamos esa mezcla. tanto que con composable, podemos crear fácilmente una tienda de gestión estatal donde cuando los datos cambien, siempre veremos los cambios a esos datos reflejados en todos los componentes que están utilizando ese composable. Si no sabes qué es la gestión estatal y no te preocupes porque vamos a estar cubriendo eso en el siguiente módulo. Bueno, estos son algunos de los principales beneficios de composable sobre mixins. 49. Crea un compostable: Vamos a crear nuestra primera composable. Vamos a saltar de nuevo a nuestra página de inicio. Abriremos la página de inicio. Así vistas de fuente y vista entera, vista de puntos. Digamos que queremos utilizar los datos de nuestro consejero y los métodos relacionados en múltiples componentes. Bueno, podríamos hacer esto usando una composable. Ahora volvamos a saltar a nuestro explorador. Y se recomienda que todas nuestras composables entren en una carpeta llamada use. En nuestra carpeta fuente, crearemos una carpeta llamada US. Y ahí vamos a crear nuestra primera composable. Y por cierto se recomienda que todos los nombres para composable estén escritos en CamelCase. Comience con el uso de la palabra. Llamaremos a esto composable. Usa contador dot js. En nuestra composable, solo queremos crear una función con el mismo nombre que nuestro consejero de uso de archivos. Entonces queremos exportar esta función para ponerla a disposición de todos los archivos. Y ahora solo podemos cortar todas nuestras cuentas de datos y métodos relacionados y pegarlos aquí. Voy a saltar de nuevo a nuestra vista de casa dot view. Y voy a copiar todo el código relacionado con contador, los objetos reactivos de datos de contador, el vigilante, la propiedad impar o incluso calculada, el aumento de contador y disminución los métodos de calcio y la halcón sin derretir. Por lo que sólo podemos cortar esa broma para usar el consejo dot js dentro de esta función. Y aún tenemos que importar todos los pocos métodos que estamos utilizando como reactivos y ver y calculados. Por lo que voy a saltar de nuevo a una vista de casa dot Vue. Simplemente copie la declaración de importación. Saltar hacia atrás para usar contador dot js. Simplemente pega esto a la parte superior. Simplemente estiraré esto un poco. No estamos utilizando los métodos ref, por lo que podemos deshacernos de eso y guardarlos ahora para que estos datos y métodos estén a disposición de cualquier componente en el que utilicemos esta composable, necesitamos exponerlos devolviéndolos en la parte inferior de esta función. Al igual que lo hicimos en nuestros componentes cuando estábamos usando el patrón de función de configuración más antiguo para nuestros componentes. Así que empecemos aquí un objeto de retorno, y simplemente devolveremos las cosas que queremos usar. Devolvamos los datos del contador, los objetos reactivos, la propiedad impar o incluso calculada, los dos métodos para aumentar y disminuir el contador. Por lo que sólo podemos devolver datos de contador, luego impar o par, luego aumentar contador y disminuir contador y guardar eso. Y ahora podemos tirar de esta composable en cualquier componente que queramos y obtener acceso a la propiedad calculada de datos y métodos que estamos regresando aquí. 50. Usa nuestra compostable: Ahora podemos importar esta composable a nuestra página de inicio que ahora está rota porque está tratando de acceder a los datos del consejero. Auditar una propiedad incluso calculada que ya no existe en este componente. Entonces, antes que nada, necesitamos importar esta composable. Por lo que sólo podemos hacer la importación. Entonces el nombre de la función que creamos aquí usa Kaltura import, use counter from slash, usuarios slash use counter, guarde eso. Por cierto, hay algunas cosas que ya no estamos usando en esta declaración de importación. Podemos ver que está en gris. Por lo que me deshago de reactivo computado y veré el siguiente tick. Y ahora tenemos que tener acceso para usar consejo composable. Así que desplácese hacia abajo a este contador comentario que quedan en antes. Hay dos formas en que podemos acceder a los datos y métodos que están en nuestra composable. Si no queremos cambiar nuestra plantilla, que actualmente está buscando un objeto llamado métodos de datos de Kaltura llamado contador de disminución y contador de aumento, esta propiedad auto o incluso calculada. Entonces podemos usar la estructuración para agarrar solo las cosas que necesitamos de nuestra composable los datos de contador impar o incluso bajo nuestros métodos de consejero de contador y disminución aumentados . Para ello, podemos crear una constante que es un objeto y establecer eso igual a nuestro contador composable estadounidense. Y entonces solo podemos sumar las cosas que queremos extraer de lo descomposable a este objeto. Por lo que no vamos a los datos del consejero impar o incluso, aumentar contador, disminuir contador. Porque estos son los mismos nombres que estamos usando en nuestra plantilla aquí. consejero de disminución de datos de Caltech aumenta contador, impar o incluso que esto no debería funcionar. Así que guardaré esa recarga la página de inicio, que ahora parece estar funcionando de nuevo. Podemos decir que todo sigue funcionando, incluido nuestro inmueble computado aquí. Ahora la otra forma en que podemos acceder a todas las cosas en imposible es simplemente asignando el conjunto de nuestra composable esta función COUNTA de uso a una constante o variable como esta. Por ejemplo, entonces podemos acceder a nuestros conteos, un objeto de datos, contador de datos de puntos contrarios objetos. Y podemos acceder a nuestro método de aumento de calcio o contador contador de aumento de puntos. Si lo estamos haciendo de esta manera, necesitaremos actualizar nuestra plantilla, estamos preparados y todo con puntos de consejero donde estamos usando Counter data dot title, necesitamos anteponer eso con counter dot. Todos estos métodos necesitamos anteponer con punto de cáncer y luego necesitamos preparar este contador datos con recuentos adoptan y nuestra propiedad computada con consejero punto en el modelo V en este título aquí con consejero dot también. Guarda esa recarga y ojalá todo siga funcionando. Sí, parece estar funcionando. No obstante, aunque a veces agarrar toda la composable como esta podría tener sentido en este caso, y en muchos casos creo que el enfoque anterior tiene más sentido porque nos permite ver exactamente lo que estamos sacando de esta composable particular. Así que sólo voy a deshacer todo. Lo acabo de hacer. Deshazte de todos esos conteos de puntos que agregamos. Cambia esto de nuevo al enfoque de estructuración D donde podemos decir con claridad exactamente lo que estamos agarrando de lo composable. Sólo asegúrate de que eso siga funcionando. Todo sigue funcionando. 51. Reutiliza nuestra compostable: Ahora reutilicemos nuestra composable en nuestra página de posts. Entonces vamos a abrir eso. vistas y postes, vista superior. Digamos que queremos una versión mucho más simple de nuestro contador en esta página, digamos que podríamos agregar un botón que tenga el contador dentro de él. Y luego cuando hacemos clic en el botón, aumenta el contador en uno. Así que primero vamos a sumar la maqueta. Después del área de texto. Agregaré un botón. Dentro de eso. Sólo pondré 0 por ahora. Lote de clase de botón Contador guardar eso. Vamos a rodear eso en un div para que vaya a una nueva línea. Guardar eso permitió algunos estilos básicos. Por lo que los conteos oscuros o el tamaño de fuente a 60 píxeles, establece el ancho en 100%, establece el color de fondo en rosa. Ahorra eso. Queremos reemplazar este 0 por nuestro contador. Y cuando hacemos clic en la parte inferior, queremos aumentar el contador. Entonces primero vamos a importar lo composable. Así que importar contador de uso de slash usuarios slash uso consejero, ahorre mucho nuevo comentario aquí abajo. El abogado Bolton creció las cosas que necesitamos de lo composable. Entonces vamos a configurar un const con un objeto, establecer eso igual a nuestra función composable. Usas paréntesis de contador. Y todo lo que vamos a necesitar por ahora es el objeto reactivo de datos del consejero que contiene nuestro contador, el método de contador de aumento. Ahorra eso. Ahora volvamos a saltar a nuestra plantilla. Deshazte de este 0, reemplázalo con llaves dobles rizadas y datos de consejero, conteo de puntos, guarda eso. Y luego agreguemos un manejador de clics a este botón. Por lo que haga clic en aumentar contador. Lo aumentaré en uno ahorre. Se puede decir que esto está funcionando ahora. Ahora digamos que decidimos que queremos que este botón sea amarillo. Cuando el número es impar. Podemos hacer eso sin siquiera propiedad computada que está en nuestra composable. Por lo que sólo tenemos que saltar hacia abajo a nuestro objeto estructurado D aquí y también son los impares o pares. Y volvamos a desplazarse hacia arriba hasta nuestro botón. Entonces digamos que queremos sumar una clase a esto. Si el número es impar, solo podemos pensar en una clase de amarillo, digamos. Pero sólo cuando impar o par es igual a extraño. Porque recuerda esta propiedad auto o incluso computada devuelve una cadena de par o impar. Yo lo guardaré. Y si miramos el botón en las herramientas dev, hacemos clic en él, cambia a uno y podemos ver que se está agregando clase de amarillo. Para volver a hacer clic en él, se ha eliminado la clase. Así que vamos a añadir un poco de estilo para que este amarillo apuntará nuevamente al elemento del botón del contador Dash, pero cuando tenga una clase de amarillo, establezca el color de fondo en amarillo, guarde esa recarga. Salimos, decimos que los libros, es amarillo cuando el número es impar. Ahora una cosa a tener en cuenta es que el cabildo se volverá a 0 cuando cambiemos de páginas. Si salto a la página de inicio, podemos decir que esto es 0 de nuevo. Si lo aumento y salto de nuevo a la página de posts, esta vuelve a 0. Eso se debe a que se creará una nueva instancia de este método de contador de uso este método de contador de usocada vez que cambiemos de página. Si queremos que nuestro consejero sea un contador global que no restablezca cuando cambiemos páginas y solo podemos mover este objeto de datos de consejero fuera de la función del Consejo de Estados Unidos. Simplemente seleccionaré esto y lo moveré fuera de la función. Y eso hará de este consejo los objetos de datos un objeto global que está disponible en todas partes. Entonces vamos a salvar eso. Y ahora, si aumento el personaje a, digamos seis y nos bajamos a la página de inicio porque dicen que todavía son seis. Si lo aumentamos de nuevo aquí para digamos diez, broma de nuevo a la página de publicación. Podemos ver que el consejero tiene diez años y ahora nunca perdemos la noción de nuestro contador global. 52. Añade Composición de VueUse: Una gran fuente de listo para usar composable es la biblioteca de uso de vista. Vamos a saltar para ver use.org. Todo lo que tenemos que hacer es instalar esta biblioteca y tendremos acceso a más de 150 composables ya hechos. Así que vamos a saltar para empezar. Y así es como podemos instalar una biblioteca con este comando. Así que voy a copiar eso, abrir nuestra terminal. Alkyne es proceso sordo presionando Control y C en ese atajo podría ser diferente en tu plataforma. Y luego lanzaremos este comando que acabamos de copiar. Ahora instalado. Así que relanzemos nuestro proyecto ejecutando npm run dev. Ahora deberíamos poder utilizar esta biblioteca. Simplemente estiraré esto un poco. Voy a saltar al censo. Desplázate hacia abajo. Voy a usar este uso en línea composable. Esta composable nos permite ver fácilmente si estamos o no en línea actualmente. Entonces si miras este estatus en línea aquí, si me desconecto de Internet, puedes ver ese cambio a offline. Y sólo voy a volver a conectarme. Yo usaré éste porque es agradable y fácil de integrar. Entonces podríamos usar esto en nuestro pequeño widget de información de usuario en la columna. Vamos a cerrar todo. Se abrirá la fuente app.vue. Vamos a saltar de nuevo a la página de documentación. Solo necesitamos importar uso en línea desde si usas slash core. Entonces vamos a copiar estas dos líneas. Los pegará a la parte superior de nuestra sección de scripts en app.vue. Sangría que. Y voy a llamar a éste, ponerlo en su propia sección aquí. Mucho comentario que dice estado en línea. Pega eso ahí dentro. Y ahora esta constante en línea debe cambiar el Verdadero o falso dependiendo de si estamos en línea o fuera de línea. Así que vamos a usar esto en nuestro pequeño widget de usuario. Entonces después del nombre de usuario, mucha pipa y un espacio, y acabaré de golpear Enter para pegar esto en nueva línea. Me encantó la Palabra Online llaves dobles rizadas. Deberíamos poder dar salida a esta constante en línea. Ahorra eso. Ahora podemos decir en línea true, y si desconecto el Wi-Fi, se ve en línea falsa. Podríamos mejorar esto mediante el uso esta constante en línea para escupir diferentes textos de diferentes colores dependiendo de si esto es verdadero o falso. Así que voy a quitar todo esto, solo pongo el espacio de estado de la red de textos y luego una nueva línea y que mucho lapso. Y luego dentro de las llaves dobles rizadas, usaré aquí una declaración ternaria if. Si en línea es cierto, entonces se escupirá en línea. De lo contrario escupirá fuera de línea. Ahorra eso. Y está configurado en línea en este momento, vamos a deshabilitar internet. Vemos un cambio a offline. Cambiemos también el color. En este punto, me voy a unir al atributo style. Estableceremos la propiedad color, y de nuevo, usaremos una declaración ternaria if. Entonces si en línea es cierto, entonces estableceré el grado más fresco. De lo contrario lo pondremos en rojo. Ahorra eso. Y podemos decir el estado de red en línea con texto verde, deshabilitó el Wi-Fi. Y decimos offline con texto rojo, y solo volveré a habilitar el Wi-Fi. Asegúrate de revisar todas las diferentes composables que están disponibles en el uso de la vista antes de empezar a trabajar en tu próximo proyecto de gran vista porque podría ahorrarte mucho trabajo. 53. ¿Qué es la gestión estatal? [Módulo 12]: En este módulo vamos a agregar la gestión estatal a nuestro arte usando penny on. Pero, ¿qué es la gestión estatal? Bueno, en primer lugar, echemos un vistazo al problema que resuelve. Así que tengo tres de nuestros componentes de aplicaciones, cabello abierto, App.vue, que es nuestro componente de vista raíz. Entonces los modales ven vista de punto, que es esta página, que es un hijo directo de App.vue. Y entonces he modelado vista, que es este modal, que es un hijo directo de modales ver punto view. Vimos anteriormente en que podíamos pasar datos de App.vue, este objeto de datos de usuario, hasta su nieta componente modal punto vista usando props. Para hacer esto, tenemos que pasar un prop hacia abajo al componente de vista del router. Entonces en modales view dot view, tuvimos que recibir este prop configurando un método de prompts definido. Entonces sumamos para pasar este prop hacia abajo nuevo a nuestro componente modal. Que en la vista de puntos modal tenemos que recibir de nuevo esto agregándolo a nuestro objeto de utilería. Y entonces finalmente podríamos usar estos datos en la vista modal de puntos. Y vimos que este acercamiento era un verdadero dolor en el balón. Luego mejoramos sobre esto mediante el uso de provide inyectar, lo que significaba que en app.vue, podríamos simplemente proporcionar este objeto de datos de usuario una vez que los que lo pongan a disposición de todos nuestros componentes descendientes app.vue, todos sus hijos y nietos. Y luego en la vista modal de puntos, podríamos simplemente inyectar este objeto de datos de usuario una vez y luego usarlo en nuestra plantilla. Esto fue definitivamente una mejora. Todavía podríamos tener algunos problemas aquí. Número uno, proporcionar sólo hará que los datos estén a disposición de los descendientes del componente donde lo usamos. Por lo que sólo pondrá los datos a disposición de los hijos y nietos de ese componente. Pero y si tenemos un componente que no es descendiente de App.vue, que no forma parte de su árbol componente. Y queremos que ese componente pueda acceder a estos datos. En este caso, proveer no va a funcionar porque sólo pone datos a disposición de los descendientes de este componente. El otro problema es, y si queremos poder cambiar estos datos que están en app.vue desde su nieta componente modal dot view. Bueno, ahora mismo necesitaríamos desencadenar un evento personalizado en la vista modal de puntos. Escucha el evento en modales ver vista de punto, activa otro evento personalizado. Escucha ese evento en app.vue antes de que finalmente podamos desencadenar un método en App.vue, que luego cambia los datos. Y de nuevo, esto se pone muy desordenado. Si queremos cambiar estos datos de un componente que está fuera del árbol de componentes App.vue, entonces no podemos hacer eso en absoluto a menos que estemos usando un evento más biblioteca o algo así. Incluso el uso de eventos la mayoría de las bibliotecas pueden volverse bastante desordenado a la administración estatal nos permite resolver este problema almacenando todos nuestros datos de núcleo de aplicaciones, y todos los métodos relacionados con esos datos en una sola lugar centralizado, que está fuera de todos nuestros componentes, pero de una manera que todos nuestros componentes puedan acceder a todos los datos y métodos. El lugar donde almacenamos estos datos y métodos llamamos tienda. Porque cuando creamos nuestros proyectos, elegimos agregar opinión automáticamente a nuestra app. La herramienta de compilación ya ha creado un archivo de centavo o tienda para nosotros. Vamos a abrir eso. Abriré el Explorador. Y queremos ir a las tiendas Source y cuenta ab.js. En opinión como si tuviéramos tres secciones principales. Acciones estatales sobre conjeturas. En estado es donde almacenamos todas nuestras propiedades de datos. Para que pueda ver una propiedad de datos de contador aquí. No te confundas por el hecho de que hemos creado un contador arriba. Este código no se genera en base a nada de lo que hemos estado haciendo. Esta es solo la tienda predeterminada que se envía cuando opinamos a nuestros proyectos usando la build x2. Tenemos estado donde almacenamos todas nuestras propiedades de datos. Vamos a estar agregando nuestras propiedades de datos de título de mostrador y consejero aquí. Entonces tenemos acciones donde podemos almacenar métodos que puedan acceder a los datos que hay en el estado y también modificarlos. Se puede ver aquí tenemos una subasta de incrementos, que está aumentando a estos consejeros en el Estado. Y vamos a estar agregando nuestro mayor consejero y disminuyendo los métodos del consejo aquí más adelante. Por último, tenemos conjeturas aquí. Colocamos métodos que pueden agarrar algo del estado, luego posiblemente modificarlo de alguna manera, y luego devolverlo. Por lo que se podría pensar en estos como una especie de propiedades computadas. Una tienda de administración estatal como esta está disponible en todas partes dentro de nuestra app. Todos los componentes de nuestra app, no importa de qué árbol de componentes que formaron parte o cuán profundamente anidados puedan acceder a todas las acciones estatales y nos consigue que estén en esta tienda. Esto nos facilita mucho la gestión de nuestras aplicaciones llamadas datos y todos los métodos relacionados con esos datos. Y también significa que no tenemos que preocuparnos por tener que pasar datos de padres, un niño a niño usando apoyos o proporcionar. No tenemos que preocuparnos por burbujear eventos de niño a padre a padre, etcétera. Ya que todos nuestros componentes de aplicaciones tienen acceso a todo lo que hay en esta tienda. En una salida v3, hay algunas formas diferentes en que podemos integrar la gestión estatal a menos que el espacio del discurso próximo. 54. Estado compostable vs. Vuex vs. Pinia: En una vista tres arriba, hay tres formas principales en las que podemos integrar la gestión estatal. Número uno, podemos integrar gestión estatal mediante el uso de composable. Número dos, podemos usar UX, que es un paquete de gestión estatal creado por el equipo de Vue. En el número tres, podemos usar penique, que es otro paquete de gestión estatal creado por el equipo de Vue. Echemos un vistazo al número uno, gestión estatal usando composable. Bueno, si saltamos a lo composable que creamos antes, usa contador en la carpeta de Estados Unidos. Lo que aquí hemos establecido es la base para un sistema de gestión estatal global. Porque tenemos nuestros conteos son datos golpeados, que se podría pensar en un estado. Tenemos un par de métodos para cambiar los datos en ese estado, que se podría pensar como acciones. Tenemos esta propiedad calculada que agarra los datos del estado y emite una cadena basada en eso, ya sea par o impar. Podríamos pensar en esto como un getter. Debido a que el objeto de datos está fuera de esta función, entonces estos datos son globales. Y así podemos cambiar esto desde cualquier lugar y ver siempre los cambios que hacemos en todas partes. Por lo que vimos que podemos aumentar el consejero en la página de inicio y luego saltar a la página de publicaciones. Seguimos viendo que el consejero se fija al mismo valor que y de igual manera, si saltamos de nuevo a la página de inicio. Por lo que en realidad podemos usar composable como esta para gestionar toda la gestión estatal de nuestra app sin tener que instalar ningún paquete extra. Si quieres conocer más sobre gestión estatal con la API de composición y checkout mi composición API estado de gestión video en YouTube. Enlace a esta conferencia. No obstante, si desea un enfoque más estandarizado y optimizado para administración estatal con capacidades de depuración más avanzadas e integración de DevTools. Entonces querrás usar un paquete construido específicamente para la administración estatal, como UX o penny on. Durante mucho tiempo, la UX ha sido el estándar de oro para la gestión estatal para las aplicaciones Vue. No obstante, según Avenue, el creador de ti, el actual estándar de oro para la gestión estatal para la composición V3 Apps API es Penny. Penny o tiene algunas ventajas sobre UX. Si saltamos de nuevo a esta tienda, este centavo una tienda cuenta ab.js. En opinión, aunque solo tenemos tres secciones, acciones estatales y getters, nuestras acciones pueden tanto acceder al estado como manipularlo también. Si bien a la vista, las acciones no pueden manipular al estado. Pueden acceder al estado para la cuenta, manipularla. Si esto fuera una puerta UX, entonces esto no funcionaría porque en una tienda así como acciones estatales y nos consigue, también tenemos mutaciones, que son métodos que pueden manipular los datos que hay en el estado. Si esto fuera una vista de al lado y quisiéramos aumentar este contador, no seríamos capaces de aumentar el contador a partir de esta acción. Tendríamos que desencadenar una mutación. Primero. Podríamos tener una mutación llamada incrementos. Esta mutación entonces aumentaría el contador y necesitaríamos desencadenar esta mutación desde la subasta usando algo así como incrementos de Despacho. Esto significa que en una vista de al lado, a menudo terminas con toneladas de métodos diferentes que tienen el mismo nombre, Donde estamos desencadenando una acción y luego desencadenando una mutación y luego cambiando el estado en una tienda complicada. Esto dio como resultado toneladas de líneas extra de código y complejidad a nuestra tienda, cuales aún no tenemos que preocuparnos con pin. Porque con Penny Are no tenemos mutaciones. Sólo tenemos acciones. Y las acciones pueden tanto acceder al estado como manipularlo también. También tenemos capacidades de depuración más avanzadas integradas en Pena, que veremos más adelante. También es extremadamente ligero alrededor de un kilobytes y está optimizado específicamente para la API de composición. Veamos cómo podríamos usar centavo en toda la gestión estatal a esta app. Desde cuando construimos nuestros proyectos, elegimos agregar automáticamente Pena. Entonces ya se ha agregado opinión a nuestro proyecto y esta tienda ya se ha liquidado para nosotros. Podemos utilizar esto como base para nuestra gestión estatal. No obstante, más adelante en el curso, cuando creamos las bolas de notas arriba, te estaré mostrando cómo agregar penique encendido, desasentado tu primera tienda completamente desde cero. Esto es realmente útil saber en caso de que alguna vez necesites agregar opinión a un v3 proyectos que ya existe. Pero si tienes curiosidad sobre cómo hacer eso ahora, pero solo salta hacia adelante a las bolas de nota. Penny, un módulo, mira el primer par de videos y luego salta de nuevo aquí. 55. Pinia - Estado: parte 1: Actualmente estamos utilizando este contador de uso composable para administrar toda la funcionalidad de este contador. Por lo que tenemos todos nuestros datos y métodos computados propiedad aquí. En cambio, utilicemos penny F2 configura la gestión estatal para este contador arriba. En primer lugar, eliminemos este uso consejo composable de esta página de inicio y toda la funcionalidad dinámica. Vamos a saltar a la vista de puntos de vista de inicio en la carpeta vistas se desplazará hasta nuestras importaciones, basta con quitar nuestro contador de uso composable. Y luego desplábamos hacia arriba hasta la parte superior y eliminemos toda la funcionalidad dinámica. Entonces esta h3 donde estamos mostrando nuestro título, vamos a reemplazar las llaves dobles rizadas por título codificado duro. Y eliminemos todos estos manejadores de clics de nuestros botones donde nuestro consejero se muestra en este lapso. Menos reemplaza eso con solo 0 y donde dice descuentos que es impar o par. Seleccionemos las llaves rizadas y simplemente tiraremos de la vara impar incluso por ahora. Entonces este impulso, en realidad sólo voy a dividir los atributos en eso. Apenas quitemos este modelo V por ahora. Creo que eso es todo. Aquí tenemos un error. El consejero de uso no está definido. Desplazemos hacia abajo a nuestra sección de guiones. Este error se debe a que estamos tratando de sacar cosas de nuestro contador composable de Estados Unidos que ya no importaban. Vamos a quitar todo esto también. Guarda eso, refresque. Y ahora hemos eliminado toda la funcionalidad dinámica de esta página. Esto es todo acaba de marcar ahora, oh, parece que acerca de tirar algunos tipos de ataques allí en lugar de la palabra título. Así que sólo arreglaré eso y lo guardaré. Agreguemos algunas propiedades estatales para nuestro mostrador y nuestro título de consejero. Saltaremos al centavo un archivo de tienda, que fue creado cuando generamos el proyecto ya se llama contador. Por lo que sólo podemos dejar el nombre tal como está. Y de nuevo, esto es simplemente coincidental. Esta tienda no se generó en base a ninguno de nuestro código. Se generó cuando creamos por primera vez el proyecto. Por ahora, solo voy a quitar las subastas y nos consigue y solo enfocarme en estado quitará esta propiedad estatal también. No hagamos una propiedad estatal para nuestro mostrador. Simplemente llamaré a este recuento, estableceré eso a 0 por defecto. Mucha propiedad para nuestro título de mostrador. Y simplemente llamaremos a este título. Y acabamos de poner esto a mi título de contador. Ahorra eso. Ahora podemos usar estas propiedades estatales en cualquier lugar dentro de nuestra app. Veamos si podemos usarlos en esta página de inicio. 56. Pinia - Estado: parte 2: Para utilizar nuestra tienda de mostrador, necesitamos importarlo y lo importamos usando este nombre de método aquí, use tienda de mostrador. Así que vamos a saltar a la vista de puntos de vista de casa, donde está todo nuestro marcado de calcio. Desplázate hacia abajo hasta la sección de impulsos. Y vamos a hacer importación, usar tienda de mostrador. Y escribí eso mal. Usas puerta consciente no está bien. Sólo revisemos. Tengo el nombre correcto. Usa la tienda del consejo de la app slash stores slash consejo. Digamos que accede a la tienda, necesitamos asignarla a una constante o a una variable. Me desplazaré hacia abajo hasta el fondo aquí. Pondré nuestro consejo comentarios cubo. Podemos simplemente hacer const y darle un nombre. Vamos a llamarlo contador, establecer eso igual a usar contador, almacenar paréntesis. Y ahora deberíamos poder acceder a todo lo que hay en nuestra tienda de consejo mediante el uso este costo de mostrador. Yo lo guardaré. Y ahora en realidad deberíamos poder ver nuestra tienda de mostrador en nuestra vista DevTools, queremos abrir las herramientas de desarrollo de Chrome yendo a Ver Herramientas para Desarrolladores o usando el atajo de teclado. Entonces podemos hacer click en esta pequeña flecha y elegir Ver. Recargar la página por alguna razón ver DevTools no funciona. Solo voy a intentar dejar Chrome y reiniciarlo, a ver si eso corrige. Es. Apenas saltó a la terminal. Comando. Haga clic en este enlace para abrir la aplicación, abrir las DevTools, haga clic en la flecha y vaya a ver. Parece estar funcionando. Ahora, vamos a estirar un poco esto. Estirar esto. Si vamos a este pequeño ícono aquí y Penny Are, podemos ver nuestra tienda de mostrador. Y si hacemos click en eso, podemos ver las propiedades estatales en ella. Se podría decir contar y podemos decir título. Ahora veamos si podemos usar esta propiedad estatal de recuento en nuestra página. Sólo voy a volver a aparecer esto por aquí. Mueve esto un poco. Asignamos nuestra tienda a esta constante de contador. Entonces para acceder a este recuento de propiedades de datos, que es un estado R, deberíamos poder simplemente hacer conteo de puntos contadores. Así que desplábamos hacia arriba hasta donde está nuestro mostrador. Selecciona este 0, un doble llaves rizadas, luego contarán puntos contrarios, guarda eso, recarga. Todavía podemos ver 0 allí y en realidad podemos modificar nuestras propiedades de estado usando el penique a dev tools dentro de las herramientas de dev view. Por lo que podemos hacer clic en este lápiz e ingresar un número. Y vemos esa actualización. Podemos usar estos pequeños botones plus y menos también para cambiar el contador. No todo parece estar conectado correctamente. Y si saltamos a nuestra tienda de mostrador y cambiamos el valor, guardamos esa recarga, vemos que ahora está configurado en diez. Cambiemos esto a 0 y guardemos eso. Por alguna razón la recarga en caliente, no parece estar funcionando en este momento. Ahora hay una página sobre el centavo, un sitio que te dice cómo habilitarlo. Y he intentado seguir eso antes y no pude conseguir que funcionara, pero vamos a tener un montón de Go ya que podría haber sido actualizado. Sólo voy a Google centavo en salto a Penny app.vue js.org. Saltar a guiar, saltará hacia abajo a Reemplazo de Módulo. Dice bla, bla, bla. Es necesario agregar este fragmento de código junto a cualquier declaración de tienda. Digamos que tienes tres tiendas de GIS, carro JS, y cobran JS, tendrás que añadir un adaptar esto después de la creación de la definición de tienda. asegura de pasar la definición de tienda correcta. Use off en este caso, sólo vamos a copiar este fragmento aquí y lo pegaremos después de usar tienda de mostrador. Supongo que necesitamos reemplazar a este usuario apagado por usar tienda de mostrador. Pega eso y guarda esa recarga. Tenemos un error aquí, no capturado ReferenceError aceptar actualización HTML no está definido. Vamos a saltar de nuevo al ejemplo. Necesitamos importar esto, aceptar actualización HTML de opinión también. Así que voy a copiar eso y darle una prueba. Guarda esa recarga. Veamos si la recarga caliente está funcionando ahora voy a cambiar el consejero a diez, guardarlo, y todavía no parece estar funcionando. A lo mejor necesitamos matar ese proceso y volver a iniciarlo. Lo mataré proceso con control y diré ejecutar npm, ejecutar dev, recargar la aplicación. Vamos a cambiar esto a 100, y todavía no parece estar funcionando. Ojalá esto se arregle en algún momento. Y si encuentro una solución, mucho video al curso, pero por ahora, solo voy a eliminar este código que acabamos de empezar. Y como no parece estar funcionando. Además, si sabes cómo hacerlo funcionar y por favor deja un mensaje con esta conferencia. Entonces vamos a eliminar esto excepto HMM, actualizar también. Contador de vuelta a 0. Por ahora, sólo vamos a tener que seguir recargando cada vez que hagamos cambios en nuestra tienda. Ahora enganchemos el título del contador. Saltaremos de nuevo a la vista de punto de vista de inicio, seleccionaremos este texto título codificado duro, eliminaremos que sean llaves dobles rizadas. Y de nuevo, para acceder a nuestra tienda, solo podemos usar contador. Y luego para acceder a la propiedad del título, solo podemos hacer título de punto, salvo eso. Y podemos ver el título de mi consejero en la página. Y si lo cambiamos en las herramientas dev aquí, entonces deberíamos verlo actualizarlo también. Y eso está funcionando. Echemos un vistazo también a esta entrada, que está aquí. Simplemente agregaremos modelo V y pondremos eso a lo mismo, cuenta, conteo de puntos. Ahorra eso. En realidad no, esto debe fijarse al título. Por lo que queremos consejero dot title, salvo eso. Si actualizamos este título en la entrada, decimos actualización en este rubro también. Y también lo vemos actualización en el DevTools. 57. Pinia: acciones: Añadamos algunas acciones a través de nuestra tienda de opiniones. En opinión las acciones de tienda son básicamente solo métodos que pueden acceder a las propiedades en nuestro estado y modificarlas. Entonces las acciones son el equivalente de los objetos métodos en la API de Opciones o cualquier método que modifique sus datos reactivos en la API de composición, solo necesitamos agregar un objeto después del estado llamadas acciones. Uy, eso debería ser subastas. Y podemos colocar todas nuestras acciones aquí. Entonces vamos a crear una acción para aumentar nuestro contador. Así que voy a crear un método aquí llamado asesor de aumento para acceder a propiedades en nuestro estado, solo podemos usar el, esta palabra clave poco como lo hicimos en la API de Opciones para acceder a nuestras propiedades de datos. Por lo que sólo podemos hacer este contador de puntos plus, plus. Este oxígeno debe ser bueno para ir. Entonces vamos a añadir una coma, duplicar esta acción, deshacernos de esa coma. Y vamos a configurar una acción para disminuir el contador llamado contador de disminución, solo diremos este contador de puntos menos menos menos. Y acabo de darme cuenta de que esto debería ser contar, no contraer. Entonces solo cambiaré eso para contar y cambiar eso para contar también. Ahorra eso. Y ahora deberíamos poder utilizar estas acciones. Así que vamos a saltar de nuevo a toda la vista de puntos de vista, y vamos a saltar a este primer botón. Después del contador, se me permite hacer clic manejador. Entonces app click es igual. Para acceder a la tienda, podemos usar contador, que es el nombre de la constante que hemos utilizado aquí. Y luego para acceder a la acción, solo podemos hacer puntos y luego el nombre de la acción. Entonces aumentar contador, salvo eso. Veamos si eso está funcionando. Creo que podríamos necesitar añadir paréntesis al final aquí. Así que intentemos eso, guarde eso, y aquí tenemos algunos errores. Tal vez solo necesitemos recargar. Vamos a intentarlo de nuevo. Veamos si sí necesitamos sumar estos paréntesis. En realidad, lo guardaré. Recargar. En realidad, no necesitamos sumar los paréntesis. Saltemos al botón menos que está directamente antes del contador. Y vamos a copiar este manejador de clics. Pegar en ese botón, cambiará esto a Counselor dot decremento contador, salvo eso. Ambos botones están funcionando ahora. Y también podemos enviar parámetros a nuestras acciones. Entonces si solo salto de nuevo al contador dot js, si queremos que estos reciban parámetros, entonces solo podemos agregar un nombre para ese parámetro aquí. Entonces llamémosle cantidad. Digamos que queremos aumentar o disminuir el contador por esta cantidad que estamos pasando. Para aumentarlo por este parámetro, solo podemos hacer este conteo de puntos más equivale a cantidad. Y luego para disminuir, solo hará este recuento de puntos menos igual a cantidad. Ahorra eso. Si queremos pasar un parámetro en, acabas de parar paréntesis al final del nombre del método para este botón, lo disminuirá en uno. Y entonces para esto Boltzmann lo disminuirá por uno menos también enganchar los otros botones también, éste y éste hará que disminuya en dos. Incremento en dos. Copiaré este manejador de clics desde el botón más, lo pegaré en este. Simplemente cambiaremos el valor que estamos pasando en dos. Entonces haremos lo mismo por los otros puntos de disminución lo, copiar el manejador de clics, pegarlo aquí, cambiar el número a dos. Y digamos que ahora ojalá todo sobre voltajes esté funcionando. Sí, podemos disminuirlo en uno y aumentarlo en uno. Estos no están funcionando. Es posible que solo necesites recargar de nuevo. Sí, eso no funciona. Podemos aumentar en dos y disminuir en dos también. Y también podemos ver los datos cambiando en DevTools. 58. Pinia: Getters: Getters nos permiten obtener un valor de nuestro estado y después modificarlo de alguna manera o generar algo basado en ese valor, luego devolverlo y ponerlo a disposición de cualquier componente que esté utilizando esta tienda, se puede pensar en nos consigue como el equivalente de gestión estatal de las propiedades computadas. Por lo que los valores de retorno de los getters se almacenan caché y solo se actualizan cada vez que cambian sus dependencias, siempre que cambien las propiedades de estado que los getters están utilizando. Así que vamos a crear un getter para dividir aquí impar o incluso, que actualmente está codificado en función del valor del contador, esta propiedad de recuento. Para empezar a sumar deudores, solo necesitamos otro objeto llamado getters. Por cierto, no importa en qué orden pongamos estos. Si lo prefieres, puedes poner a los getters tras estado y luego subastas en la parte inferior. Realmente no importa. Pero de todos modos, agreguemos un get-up que resuelve si este número es impar o par, y luego devuelve los textos impares o pares. Entonces crearemos un getter llamado impar o par. Esta debería ser una propiedad que nos fijamos a un método como este para acceder a nuestro estado, solo podemos pasar en el estado como parámetro en este método. Entonces para agarrar esta propiedad de conteo que está en el estado, solo podemos hacer recuento de puntos estatales. Queremos saber si esto es extraño o parejo. Así que de nuevo, usaremos el operador restante para hacer esto. Simplemente puede hacer si el recuento de puntos del estado resto dos es igual a 0. Es decir, si dividimos el conteo por dos y obtenemos el resto, y ese resto es igual a 0, entonces sabemos que el número es parejo para podamos devolver el texto, incluso. De lo contrario, podemos devolver la autonomía del texto. Es importante señalar que para que nos lleve a trabajar, sí necesitan devolver un valor. Así que guardemos esa recarga. Y deberíamos poder usar esto en nuestra página. Así que vamos a saltar a nuestra vista de casa dot Vue. Deshazte de esta impar slash. Incluso los textos son llaves dobles rizadas. Podemos simplemente hacer contra-punto impar o par. Ahorra eso. Y podemos decir que el contador es parejo, lo cambiamos a uno. Vemos que el mostrador es extraño. Si también estamos mirando herramientas dev, podemos ver a nuestros captadores aquí también, y podemos ver el valor de eso cambiando también. Otra ventaja de centavos sobre unas cuantas x, que no mencioné antes, es que no necesitamos especificar las acciones estatales de los getters cuando las estamos usando en nuestra plantilla o en nuestra sección de scripts. Entonces en una vista x arriba, tendríamos que hacer consejero dot state, dot title. Y luego cuando desencadenamos una acción, tendríamos que hacer acción contra puntos, disminuir el consejo, etc. En opinión Europa, no necesitamos especificarlos, lo que hace que nuestro código sea un poco menos verboso. 59. Pinia: Usa nuestra tienda en cualquier lugar: Ahora que nuestra tienda de opiniones está configurada, podemos usar las acciones estatales y nos lleva a cualquier parte de nuestra app. Vamos a usar esta tienda en nuestra página de posts para este contador. Este contador actualmente está utilizando el contador de uso composable que creamos anteriormente. Entonces vamos a quitar eso de esta página. Y toda la funcionalidad dinámica y enganchar los spots no son demasiado nuevos. Penny cuenta o tienda. Saltemos a esta página. Vistas y publicaciones view dot Vue eliminará esta importación del contador estadounidense, composable. Y también quita este const dondequiera agarra las cosas que estamos usando de lo composable. Y luego saltaré a la plantilla. Vamos a reemplazar este contador de datos de puntos cuenta con los innumerables en nuestra tienda. Entonces contador conteo de puntos. Y vamos a reemplazar este método aquí, aumentar contador a la mayor acción de contador que hay en nuestra tienda. Podemos simplemente cambiar esto para contrarrestar , punto aumentado contador. Ya que el método tiene el mismo nombre. Esta clase que estaba escupiendo en base a si el número es impar o par, solo podemos reemplazar este extraño o incluso con el getter que está en nuestra tienda. Entonces contrarresta punto impar o par. Así que vamos a cambiar eso cuenta punto impar o par, guarde esa recarga y tenemos un error aquí. ¿ Qué está pasando? El contador de propiedad es el acceso durante render pero no se definió en instancia. Vamos a desplazar hacia abajo. Nos olvidamos de importar nuestra tienda. Vamos a saltar a casa vista dot Vue. Copia esta línea de entrada donde estamos importando el taburete, pegarlo en la vista de postes, vista de puntos. Y entonces también necesitamos asignar esto a una variable. Así que voy a copiar esto desde casa view dot view, pegue eso aquí. Simplemente eliminaré ese comentario, guarde eso y deberíamos estar bien para ir. Entonces volvamos a cargar. El botón ahora está funcionando. Podemos decir en las herramientas dev está modificando los innumerables en nuestra tienda de opinión porque nuestra tienda de opinión es global. ELLOS. Cuando saltamos a la página de inicio, deberíamos ver que el conteo se establece en ocho. Lo es. Si aumentamos el contador aquí y saltamos de nuevo a la página de posts, podemos ver que el valor del contador siempre está actualizado independientemente de dónde estemos dentro de nuestra app. 60. Proyecto de clase: Noteballs de notas [Módulo 13]: Vamos a pasar el resto de este curso tomando todo lo que hemos aprendido para crear esta aplicación de toma de notas del mundo real llamada Nope balls, creando esto, pero permítanos tomar todo nuestro nuevo conocimiento de los fundamentos de la composición API y solidificar ese conocimiento con la creación de un mundo real fuera de cero. En esta app, podemos mostrar una lista de notas. Cada nodo tiene la nota sobre el número de caracteres y un botón de edición y eliminación. Podemos añadir una nueva nota. Podemos editar una nota, guardarla, y podemos eliminar una nota también con este modal de conformación. Y también tenemos un encabezado con enlaces lo largo de dos páginas, notas y estadísticas. Y tenemos esta página de Estadísticas donde mostramos estadísticas relacionadas con nuestras notas, incluyendo el número de notas que tenemos sobre el número total de caracteres de todas nuestras notas. También va a parecer presentable como se puede ver usando la biblioteca CSS bowler. Y también va a ser receptivo también. En escritorio tenemos estos enlaces a nuestras dos páginas, pero si escalamos esto hacia abajo, podemos ver todos los elementos escalados hacia fuera para móvil y nuestros enlaces en el encabezado cambiaron a este icono poco más grande. Y cuando hacemos click en eso, podemos ver los enlaces a nuestras dos páginas. Esta app va a hacer uso de casi todos los conceptos que aprendimos anteriormente en el curso, incluyendo ver router en las rutas de Estados Unidos y usar router composable. Esta vez realmente vamos a instalar Vue Router y configurarlo todo desde cero, se va a utilizar datos reactivos incluyendo refs y objetos reactivos va a utilizar métodos de propiedades computadas, y relojes va a utilizar componentes secundarios incluyendo apoyos, emite, y actualizar el valor del modelo va a utilizar refs de plantilla en composable, incluyendo composable personalizado en un componible de los pocos use biblioteca va a usar directivas y ganchos de ciclo de vida. Y vamos a configurar toda la gestión estatal de nuestra app usando centavos. Aunque esta vez realmente vamos a instalar penique a, configura nuestro penique una tienda completamente desde cero. Y por supuesto también estaremos agregando acciones estatales y un montón de getters a nuestro centavo una tienda. 61. Crea un proyecto: Vamos a crear una vista completamente nueva, tres proyectos para nuestras bolas de nota arriba. Vamos a saltar a la página web V3. Buscaré V3 bromeado a v3 punto Vue js.org. Y más temprano en el curso, te dije que los docs están a punto de ser renovados masivamente y tuve que cambiar la URL para llegar a los nuevos patos. Pero parece que los nuevos docs y nuestras vidas, sólo podemos saltar a instalar. Desplázate hacia abajo. Nuevamente, necesitamos no tener JS instalado. Lo que probablemente ya tenga eso instalado en este punto. Vamos a crear un nuevo proyecto de vista con este comando. Copia eso, salta a mi terminal y VS Code y un gamete puede cambiar esto con control y volver tick. Y me aseguraré de que estés en la carpeta donde guardas tus proyectos. Definitivamente no quieres ejecutar esto en la carpeta de proyectos anteriores si ahí es donde estás, lo pegaré y lanzaré eso. Escribiré y para aceptar instalar, Crear vista para el nombre del proyecto y la carpeta del proyecto. Voy a usar view dash composition API. No bolas. Podemos usar cualquier nombre de carpeta que te guste. Voy a elegir nodo a todas las opciones. No vamos a instalar rutas Vue a esta vez porque va a instalar eso desde cero en cambio todo desde cero. Entonces no, y de nuevo con centavos, vamos a poner eso todo desde cero. Entonces voy a elegir No, no, no. Es posible que quieras considerar usar yes Lynn en tus propios proyectos para ayudarte a garantizar la calidad del código. Pero por simplicidad, solo voy a elegir nota a esto. Y tenemos algunos pasos de lanzamiento aquí. Entonces solo necesitamos cd en la carpeta y ejecutar npm install para instalar las dependencias y luego ejecutar npm run dev. Y puedo ver aquí se crea la carpeta, composición API nope balls. Así que voy a arrastrar eso al Código VS. Y luego abre la terminal y ejecuta npm install. Entonces npm ejecuta dev para lanzarlo. Ahora podemos Command y dar click en este enlace y podemos ver la app básica ejecutándose en el navegador. Antes de empezar, sólo cambiemos el nombre que aparece ahí en la parte superior. Entonces voy a abrir el Explorer y ir a index.html. Acabo de cambiar el texto en estas etiquetas de título para anotar bolas. Guarda eso, y ahora estamos listos para empezar a crear bolas de nope. 62. Router instala y configuración: Si bien hay una opción en la herramienta de compilación solo usamos para agregar Vue Router a nuestro proyecto de forma automática. Es bueno saber cómo hacer esto manualmente solo en caso de que tenga alguno para agregar Vue Router a una vista existente. Tres proyectos que no lo tienen ya montados. Agreguemos el Router Vue a nuestro proyecto y consigamos que todo esté configurado. Entonces vamos a saltar a nuestra terminal y matar el proceso de muerte con control y digamos instalar Vue Router. Simplemente podemos ejecutar npm install Vue Router four para obtener la última versión de tu router que ahora está instalado. Podemos volver a lanzar nuestro proyecto con npm run dev, cerrar la terminal. A lo largo del router a nuestra API necesita saltar fuente y main.js. No podemos ser enrutados a nuestra aplicación importando el método Create Router desde Vue Router y agregarlo a esto crea una cadena con algunas opciones. En primer lugar, después de esta primera línea, necesitamos importar Create Router desde el router. Y ahora podemos usar este crear rutas o método para configurar nuestro router. Tenemos que asignar esto a una constante. Entonces crearemos una constante llamada router y asignaremos esto a eso. Queremos pasarle un objetivo con todas nuestras opciones de router. La primera opción que necesitamos agregar es el modo historia. Podemos establecer esto para crear historial web o crear historial de hash web. Ahora crear el historial web usará URLs reales en el navegador cuando navegamos por todas las páginas. Por ejemplo, si fuéramos a una página Acerca de que la ruta simplemente sería slash sobre. Mientras que con el historial de hash web, diremos slash luego hash, luego slash, y luego sobre cuando vayamos a nuestra página sobre, y voy a usar el historial de hash web aquí, porque cuando estamos usando este modo, no necesitamos ninguna configuración de servidor elegante para que nuestra aplicación se ejecute si decidimos implementarla en un servidor, vamos a establecer esta propiedad de historial para crear el historial de hash web. Tenemos que importar eso desde Vue Router VS Code se agrega automáticamente eso para mí aquí. Pero si el tuyo no tiene injusto, agrégalo a este impulso. La siguiente opción que necesitamos sumar es nuestras rutas. Creamos una propiedad llamada configuración de rutas a una matriz. Y podemos configurar todas nuestras rutas aquí. Pero antes de hacer eso, agreguemos esta instancia de enrutador a nuestra aplicación. Entonces después de esto, crea nuestra app, podemos agregar el método estadounidense a esta cadena dot use paréntesis, y solo podemos pasar esta constante de enrutador. Solo voy a romper esto en múltiples líneas y ahorrar eso. Vamos a asegurarnos de que no estamos viendo ningún error. Voy a recargar. Y creo que esta flecha podría ser simplemente porque aún no hemos establecido ninguna ruta. Hagámoslo a continuación. 63. Router añade algunas rutas: Vamos a configurar algunas rutas para nuestra app. Y nuestra app va a tener una vista de notas, nuestra página, y una vista de estadísticas. Vamos a configurar una ruta para nuestras notas ver primero. Bueno, antes que nada, vamos a necesitar un componente que podamos utilizar para esa vista de notas. Vamos a saltar de nuevo al Explorador de archivos y haremos clic derecho en la carpeta fuente y crearemos una nueva carpeta llamada vistas. Esto no tiene que llamarse puntos de vista. Podrías llamarlo páginas si quieres, pero lo voy a llamar vistas. Y vamos a crear un nuevo componente ahí dentro, y llamaremos a esta vista notas. No vea las etiquetas de plantilla. Por ahora, acabo de empezar un div con una clase de notas. Dentro de eso, una gran cantidad de H uno que acaba de decir notas y guardar eso. Y ahora podemos usar este componente para nuestra vista de notas. Saltemos a main.js y agreguemos una ruta para nuestra vista de notas. Para cada ruta en nuestra app, necesitamos agregar un objeto con algunas opciones. En primer lugar, necesitamos la opción de camino. Esto determinará qué camino nos llevará a esta ruta. Voy a establecer el camino para recortar seguir la vista de notas, lo que solo significa que esta será la ruta raíz de nuestra app cuando la primera visita estemos arriba, esta es la ruta a la que irá. También necesitamos agregar una propiedad de nombre. Estableceré esto en notas sobre esta propiedad name hace que sea más fácil para nosotros enviar al usuario a una ruta en particular mediante programación. Y por último, necesitamos agregar la propiedad componente que acabamos de establecer al componente que queremos utilizar para esta ruta. Entonces, antes que nada, necesitamos importar nuestro componente. Por lo que vamos a importar notas de vista desde vistas de barra inclinada, vista de barra inclinada notas vista de punto. Ahora en la vista anterior construye que usaban Webpack, no necesitábamos poner aquí la vista de puntos, pero cuando estamos usando VT, que estamos ahora que sí necesitamos adoptar vista. Y también esto en símbolo aquí. Esto es solo un alias que se refiere a esta carpeta fuente. Y este alias se está definiendo en este archivo vt dot config dot js. Podemos ver eso aquí. También puedes agregar tu propia introducción de alias a diferentes carpetas si lo deseas. Pero de todos modos, vamos a saltar de nuevo a main.js y ahora podemos establecer el componente para esta ruta. Estableceremos esto para ver notas. Vamos a guardar eso y recargar. Todavía tenemos un error aquí. Y acabo de averiguar cuál es el tema cuando establecemos el historial para crear el historial de hash web, esto necesita ser una llamada al método. Solo tenemos que agregar paréntesis al final de eso, salvo que la app esté funcionando de nuevo. No obstante, no podemos ver esta vista de notas que acabamos de crear en el navegador. Y eso es porque necesitamos agregar un componente de vista de enrutador a nuestra aplicación, a nuestro componente raíz app.vue. Y lo haremos en un minuto. Pero antes de que hagamos eso, acabemos de configurar una ruta para nuestra página de estadísticas. Así que vamos a saltar de nuevo a la carpeta vistas. Notas de vista duplicadas, vista de puntos. Llamaremos a esta vista estadísticas punto vista. Simplemente cambiaré la clase el día de dos arranques. Cambiaremos el texto en el rubro dos arranca también. Ahorra eso. Saltar de nuevo a main.js. Y agreguemos una coma después esta ruta y dupliquemos eso. Por cierto, lo hice al seleccionar estos textos y presionar Alt Shift y hacia abajo, el atajo podría ser diferente en su plataforma. Ahora vamos a deshacernos de esta coma aquí. Casi establece el camino para cortar estadísticas para que cuando vayamos a cortar, eso es lleguemos a las estadísticas. Cambió el nombre a parar también. Y ahora tenemos que configurar el componente para que pregunte a la vista de puntos, pero primero tenemos que importarlo. Así que duplicaré esta línea de notas de vista e importaremos estadísticas de vista de la vista de barra inclinada del arte, estadísticas vista de punto, y guardaremos eso. Ahora solo necesitamos cambiar este componente para ver estadísticas, digamos eso, pero aún no podemos ver en la vista de Notas en la página si vamos a la barra de ruta y no podemos ver la vista de estadísticas si vamos a el camino slash estadísticas. Y eso es porque necesitamos agregar un componente de vista de enrutador a nuestra aplicación. Hagámoslo a continuación. 64. Añade RouterView y navegación: Déjame ir a la barra de camino. No te vemos notas componente con este encabezado con las notas de texto. Y eso es porque necesitamos agregar un componente de vista de enrutador a nuestra aplicación es el componente de vista del router que determina dónde se mostrarán nuestras rutas. Así que vamos a saltar a nuestra fuente de componente raíz, app.vue. Y en realidad solo voy a eliminar esta sección de script, eliminar todo dentro de la plantilla, y eliminar la etiqueta de estilo y todos los estilos también. Ahorra eso. Y ahora también podemos eliminar todos los componentes en la carpeta de componentes de origen. Seleccionaré todo aquí, haga clic derecho y eliminaré. Vemos una flecha, pero si recargamos, entonces el error desaparece. Ahora para mostrar nuestras rutas, solo necesitamos agregar un componente de vista de enrutador. Y podemos hacer esto en el caso del guión como esta vista del router. Podemos hacerlo en el caso Pascal, que voy a hacer. Entonces vista del router, guarde eso. Y ahora podemos ver nuestra ruta de notas en la página. Y si vamos al camino slash estadísticas, podemos ver nuestra vista de estadísticas. Ahora usar la barra de direcciones para navegar no es muy divertido. Agreguemos algunos componentes de enlace de enrutador a nuestra página para que podamos navegar por encima de este componente de vista de enrutador. Voy a agregar un componente de enlace de enrutador dentro de eso, pondré las notas de texto y luego lo duplicaré. En éste, pondremos las estadísticas de texto para determinar a dónde irán estos enlaces del router. Podemos simplemente añadir un dos prop y configurarlo al camino que queremos ir demasiado lejos, la vista de notas, sólo podemos establecer esto para cortar. Y luego para la vista de estadísticas, solo podemos establecer esto para cortar estadísticas. Vamos a salvar eso. Apenas agreguemos espacio después de la primera y una tubería y luego otro espacio. Digamos que ahora podemos navegar por nuestra app. 65. Router alineación: Nuestro router ahora está todo configurado y funciona en. Pero antes de seguir adelante, vamos a ordenar un poco nuestro código. Entonces, antes que nada, solo voy a extraer todo nuestro código de configuración del router en su propio archivo en la carpeta fuente. Voy a crear una nueva carpeta llamada router. Ahí dentro. Voy a crear un nuevo archivo llamado index.js. Vamos a saltar de nuevo a main.js. Voy a usar una selección múltiple manteniendo presionado la tecla Alt. Aunque el atajo podría ser diferente en tu plataforma, voy a seleccionar todo este router, const las dos entradas para nuestra vista de notas y vista de estadísticas. Esta línea donde estamos importando el Create Router y los grandes métodos de historial de hash web desde Vue Router. Voy a cortar mucho y simplemente ordenar esto un poco. Y luego salta a index.js en nuestra carpeta del router, pega todo ese código en, y apenas comenzaremos una línea después de nuestras entradas. Y ahora queremos exportar esta instancia de router para ponerla a disposición de otros archivos. Entonces al final sólo podemos hacer exportar router predeterminado y guardar eso. Y ahora si volvemos a main.js, podemos importar esta instancia de enrutador agregando importación desde el router de barras. Y en realidad no necesitamos agregar slash index.js cuando usamos el nombre de archivo index.js, siempre buscará este archivo automáticamente. Por lo que sólo podemos hacer importar router desde el router de la slash. Y ahora cuando activamos usar router, estamos usando la instancia del router del archivo index.js en la carpeta del router. Salvemos eso y veamos si todo sigue funcionando. Todo sigue funcionando. Una cosa más, voy a saltar al index.js y voy a poner todas estas rutas en su antigua constante. Por lo que voy a configurar una constante llamada rutas. Establezca eso igual a una matriz. Entonces voy a cocinar estos dos objetos, pegarlos aquí. Y ahora sólo podemos establecer esta propiedad rutas, dos rutas. O como estos nombres son los dos mismos, sólo podemos taquigrafía esto a solo rutas. Así que vamos a guardar eso, asegurarnos de que siga funcionando. Aún así. Todavía está funcionando bien ahora lo hemos atado al archivo main.js. Moví todo el código relacionado con nuestro router a su propio archivo. 66. Bulma y diseño: Instala Bulma [Module 14]: Para ayudarnos a que nuestra perspectiva sea bonita, vamos a usar la biblioteca CSS Bulmer. Voy a saltar a Walmart.io. Ahora este no es un curso de CSS, así que no me voy a centrar en bulla y CSS hasta marzo. Simplemente lo usamos para ayudarnos a que nuestra perspectiva sea bonita sin tener que pasar toneladas de tiempo escribiendo exceso de CSS. Y de esa manera podemos enfocarnos puramente en Vue.js tres y en la API de composición. Además, no necesariamente estoy sugiriendo que debas usar Bulmer para tus proyectos. Deberías hacer una elección informada en función tus necesidades individuales de proyectos. No obstante, creo que bombardero es actualmente el tercer framework CSS más popular después de bootstrap, tailwind CSS. No obstante, he elegido bola para este proyecto porque es el framework CSS más fácil para empezar. Y tiene todos los componentes que vamos a necesitar para este proyecto. Si salto a documentación y componentes, tenemos este componente de tarjeta que vamos a utilizar, este componente Navbar que vamos a utilizar, el componente modal. Ahora vamos a usar, tiene un montón de componentes de granja que vamos a utilizar como esta entrada. Y también tiene un bonito componente de botón que vamos a usar también. Vamos a instalar bullet a nuestro proyecto. Voy a saltar a resumen y luego empezar a desplazarse hacia abajo. Y hay algunas formas en que podemos instalarlo. Podemos instalarlo usando un enlace CDN donde estará cargando externamente. Podemos descargarlo desde GitHub. Podemos instalar el paquete npm. Esta es la forma en que lo voy a hacer. Por lo que necesitamos ejecutar npm install Puma. Así que vamos a copiar eso. Abre nuestra terminal, mata el proceso de muerte y ejecuta npm install bulla. Y eso está instalado. Y si saltamos a nuestra carpeta de módulos de nodo, podemos decir que Bulmer está aquí. Y si saltamos a la carpeta CSS, podemos decir archivos CSS bola. Voy a usar la versión minificada, Bohmer dot main.css. Lo que también podríamos usar la versión minificada forma dot CSS. Voy a hacer clic derecho en bullet dot main.css. Da click en Copiar ruta que voy a saltar a app.vue. Voy a agregar una etiqueta de estilo para importar ese archivo CSS. Voy a sumar en Importación. Entonces pegaré en ese camino. Tenemos el camino completo en mi computadora aquí. Sólo necesitamos el camino de esta carpeta de bolos aquí. Entonces lo eliminaré todo antes de esa carpeta bullet. Tenemos que agregar un punto y coma al final. Digamos que necesitamos relanzar nuestra app. Vamos a ejecutar npm, ejecutar dev. Regresa a nuestra app. Podemos ver nuestros estilos ya han cambiado un poco, pero solo para asegurarnos de que Bulmer esté funcionando, agreguemos una clase a cada uno de nuestros componentes de enlace de router aquí de botón. Y esto debería darle a este un bonito estilo de botón. Ahorra eso. Podemos ver algunos bonitos botoncitos ahora, y ahora podemos empezar a usar Bohmer para que Kiara se vea hermosa. 67. Barra Naval: diseño: Agreguemos un bonito y hermoso navbar a nuestra app. Ahora en primer lugar, vamos a crear sólo un componente para él que se importará en app.vue. Y por alguna razón mi carpeta de componentes ha desaparecido. Pero deberías tener aquí una carpeta de componentes. Pero voy a crear esos componentes. Dentro de eso. Voy a crear una carpeta llamada Layout. No me gusta la forma en que los grupos VS Code son carpetas juntas como esta por defecto. Así que sólo voy a arreglarlo. Entraré en código y preferencias y ajustes, y voy a buscar compactos. Podríamos simplemente desmarcar esta opción de compilar carpetas. Y ahora tenemos aquí un sistema de carpetas normal. Dentro de la carpeta de diseño. Voy a crear un archivo llamado navbar dot view. Por ahora solo comenzaremos las etiquetas de plantilla. Simplemente agrega un div con mi barra de navegación, el texto. Ahora vamos a saltar a app.vue e importar este componente scripts Up tags. Voy a añadir aquí un comentario de bloque que solo dice importaciones. Entonces vamos a importar barra de navegación de componentes de barra inclinada diseño barra barra suficiente vista de punto de barra. Yo uso estos grandes comentarios para dividir mi código en secciones. Acabo de encontrar que me hace mucho más fácil escanear a través de mi código. Bueno, esto es totalmente opcional. No necesitas agregar estos comentarios si no quieres. Ahora vamos a pegar este componente Navbar en la página. Voy a deshacerme de estas rutas de vista piernas por ahora y acaba de salir nuestra navbar. Vamos a salvar eso. Y podemos decir mi navbar en la página. Ahora vamos a saltar al sitio de la calvicie y vamos a ir a Componentes. Navbar, desplázate hacia abajo, estirar esto un poco, y sólo vamos a copiar este ejemplo aquí para una barra de navegación básica y luego vamos a modificarlo. Entonces voy a copiar todo este código. Mueve esto hacia atrás, y luego saltaremos a Navbar vista de puntos, pegarla todo aquí, sangrar eso y guardar. Y ahora podemos ver navbar. Sólo voy a alejar un poco. Quiero terminar en un bonito color verde en lugar de blanco. Y podemos hacer eso agregando una clase a este elemento NEF cuándo dividir los atributos en eso usando la extensión de atributos HTML divididos que instalamos anteriormente. Mucha clase de éxito, salvo eso. Ahora tenemos una bonita Napa verde. Y de nuevo, no voy a estar explicando todas estas clases desde balas mucho porque quiero estar enfocado en la vista y en la composición API tanto como sea posible. Pero puedes encontrar todas estas clases disponibles en el sitio. Por ejemplo, para esta barra de navegación desplegable, dos colores te muestran cómo agregar todos estos diferentes colores aquí. 68. Barra de Nav, navegación y logotipo: Personalicemos esta barra de navegación. En primer lugar, quiero deshacerme de este Más enlace aquí con este desplegable. Desplazemos hacia abajo suficiente vista de Bardot y veamos si podemos encontrar eso. Podemos ver ese enlace más aquí. Y podemos ver este div con una clase de navbar. Vamos a colapsar ese div, solo deshazte de él. Salva eso y vemos que desaparecen. Ahora vamos a mover estos dos enlaces hacia el lado derecho. Así que voy a desplazarse hacia arriba en estos dos enlaces de elementos navbar aquí. Voy a cortarlas y acabo de deshacerme de este navbar dash stop Dip. Voy a pegar esos enlaces en esta navbar end div, que los pondrá a la derecha. Vamos a colapsar este dip dentro de eso, no por artículo, y deshacernos de eso. Simplemente pegaré en los enlaces que cocinamos antes y guardaré eso. Hagamos estos enlaces dos notas ver y nuestro personal ver. Sólo voy a quitar la segunda barra de laboratorio I2. Ahora en este primero, voy a cambiar esto a un componente de enlace de enrutador. Se asegura de cambiar tanto las etiquetas de apertura como de cierre que voy a dividir los atributos en esto, cambiar el texto a notas. Tengo mucho que apuntalar a este enlace del router, conformarme con la barra de ruta, que es donde nuestros routers de notas. Y luego seleccionaré este enlace del router, lo duplicaré. Y cambiaremos los dos prop a las estadísticas de barra de ruta, y cambiaremos el texto para empiece también y guardaremos eso. Ahora tenemos enlaces a nuestra página de notas y paradas. Podemos ver este rubro de citas. Paula tiene una clase que está activa, que no podemos a uno de estos elementos navbar para que parezca activo. Se puede ver este enlace ahora se ve activo. Estos componentes de enlace de rutas pueden realmente agregar una clase al enlace cuando ese enlace es el enlace activo. Si acabo de atrapar esa clase, sólo podemos agregar un prop de clase de dash activo, configurarlo en. Esta clase es octava, y también copiaré eso y lo pegaré al enlace de estadísticas. Decir que ahora deberíamos tener lugares activos en nuestros enlaces. Y sí, eso está funcionando. Ahora vamos a reemplazar esta bomba un logotipo por un título para nuestra app. Me desplazaré hasta arriba y dentro de este navbar marca div, tenemos este ataque con una clase de elemento navbar. Voy a quitar la imagen que está dentro de eso y quitar esta H ref. No quiero cambiar esto una etiqueta en un div porque no quiero que esto sea un enlace. Y luego dentro de eso solo agregaré los textos nope bolas. Y guarde eso para mejorar el estilo del texto aquí, vamos a sumar una clase a este día de, de talla cuatro para que sea un poco más grande. Y luego una clase de monoespacio familiar para darle esta fuente de estilo monoespacial. Y de nuevo, puedes encontrar todas estas clases en el sitio del bolo, que está muy bien documentado. 69. Barra de nav, diseño y menú responsivo: Ahora actualmente el contenido de esta barra de navegación seguirá estirándose a medida que el navegador se vuelve más amplio y ancho, lo que no se ve demasiado genial, especialmente en pantallas realmente grandes. Tenemos el logo justo por aquí y luego estos enlaces justo por aquí. Me gustaría que todo esto se limitara en el medio después de cierto punto. Y podemos usar elementos de contenedor deshuesados para hacer esto. Entonces voy a rodear todo dentro en navbar con un div, con una clase de contenedor. Así que acabo de minimizar todo lo que hay ahí dentro. Mucho div con una clase de contenedor. Y para asegurarnos de que limite una vez el navegador sea más ancho que un cierto número de píxeles, podemos agregar una clase de is dash marks, dash desktop. Y estas clases están todas documentadas en el balón de la vista. Y entonces solo voy a mover esta marca navbar, este menú navbar a ese div y guardar eso. Y ahora podemos ver unas pantallas más grandes. Todo está limitado a la mitad de la página. Ahora si nuestra vista se pone por debajo de 100 a cuatro píxeles, vemos que los enlaces de navegación desaparecen y vemos esto, el viejo icono del mendigo, pero no pasa nada cuando hacemos clic en él. Eso es porque para mostrar el menú móvil y cambiar este ícono a su estado activo, necesitamos agregar una clase de activo tanto al ícono de la hamburguesa como al menú nav también. Ahora todo esto está documentado en la página navbar. Pero sólo para demostrar esto, vamos a codificar esas clases en. Ahora, voy a dividir los atributos en esto una etiqueta con una clase de navbar grande. Voy a sumar una clase de activo y guardar eso. Y podemos ver el icono cambiar a una X. Y si nos desplazamos hacia abajo a este menú navbar div, también voy a dividir los atributos en eso mucho la misma clase a este div. Se ahorra eso. Y ahora podemos ver aparecer el menú móvil. Vamos a configurar un href para cambiar estas clases. Cuando hacemos clic en el menú de hamburguesas, voy a quitar estas clases codificadas por ahora del menú navbar div en el navbar Berger una etiqueta, decir que a menos que salte hacia abajo a nuestra sección de script, que no existen todavía. Así que vamos a crearlo configuración de Scripts. Lote de comentario de bloque que dice nav móvil. Casi configura una constante llamada Show Mobile Nav. Establezca eso igual a un href con un valor inicial de false. Esto es falso. No mostraremos la siesta móvil cuando sea verdad, mostraremos y necesitamos importar el método ref desde la vista. Así que sólo voy a añadir un comentario rápido aquí. Las importaciones importarán ref desde la vista. Ahorra eso. Ahora agreguemos condicionalmente esas clases basadas en este href. Así que saltemos primero al ícono de la hamburguesa, que está aquí con una clase de hamburguesa navbar dash. Ahora vamos a enlazar al atributo de clase agregando llaves rizadas de clase de colon, y muchas clases, el guión de A activo. Pero sólo cuando Show Mobile Nav es cierto. Y luego copiaré esto y también lo agregaré a este div con una clase de menú de guión navbar. Y lo guardaré. Ahora si saltamos a nuestro ref y cambiamos el valor a true, entonces ahora podemos ver el nav móvil en la versión activa del ícono de la hamburguesa. Así que vamos a volver a poner eso a falso. Cambiará el valor de este href. Cuando hacemos click en el menú de hamburguesas, saltaremos hasta la etiqueta de hamburguesa navbar y agregaremos un manejador de clics. Y cuando hacemos click en esto, vamos a establecer Show Mobile Nav igual al opuesto de Show Mobile Nav. Si es falso, lo pondremos en true. Y si es cierto, lo vamos a poner en falso porque esta es una etiqueta va a intentar ir a algún lugar cuando le pinchemos. Entonces para evitar que eso suceda, solo voy a añadir un modificador de punto prevenga. Esto evitará que el comportamiento predeterminado del elemento que estamos haciendo clic en el comportamiento predeterminado de una etiqueta es ir a otra página. Salvemos eso y veamos si eso está funcionando. Da click en el botón y vemos aparecer el nav móvil. Haga clic de nuevo y lo vemos desaparecer. Ahora, no me gusta el hecho de que nuestro menú móvil esté empujando hacia abajo el contenido de nuestra página. A ver cómo está empujando este rumbo ahora, preferiría que solo estuviera posicionado absolutamente sobre la parte superior de nuestra página. Apenas agreguemos un poco de estilo para que eso suceda. Desplazemos hacia abajo hasta la parte inferior de la etiqueta de estilo. Mucha consulta de medios aquí para medios móviles, ancho máximo 1023 píxeles porque es cuando los estilos de navegación móvil inician cuando bajamos el navegador. Ahora queremos apuntar en suficiente menú inferior, que es este div con una clase de menú navbar. Así que solo voy a agregar guión, menú de guión, configuración para posicionar absoluta y establecer la izquierda en 0 y establecer el ancho al 100%. Guarda ese clic en el botón. El menú móvil ahora se coloca sobre la parte superior de nuestro contenido en lugar de empujarlo hacia abajo. 70. Páginas (diseño): Antes de empezar a trabajar en el diseño de nuestra página de notas, la página principal en nuestra app. En primer lugar, me gustaría limitarme el contenido de todas nuestras páginas. También agregaré un poco de relleno porque ahora mismo podemos ver el contenido de nuestras páginas está justo arriba en la esquina sin relleno. Y también una constante siempre está justo encima a la izquierda. Independientemente de lo ancho que sea el navegador, que no se ve demasiado bonito. Solo voy a usar las mismas clases que usamos para frenar el contenido en nuestro contenedor Napa y son las clases de escritorio de Mac. Y así para hacer esto, voy a saltar a nuestra app.Vue. Simplemente rodear nuestra vista de enrutador en un div con estas clases. Por lo que el contenedor es max desktop. Simplemente mueva la vista del enrutador a eso y guarde eso. Podemos decir que nuestro contenido ahora está limitado. Bona tiene algunas clases de relleno que podemos usar para agregar un poco de relleno alrededor de nuestras páginas también. Y todos estos están documentados en el balón deben citar muchas clases de Px dash T2 para agregar algún relleno horizontal y luego un racimo de P, guión cuatro para agregar algún relleno vertical. Esto se ve bien ahora en pantallas más pequeñas, pero en pantallas más anchas, nuestro logotipo no está alineando con nuestro contenido. Creo que se vería mejor si esto se alineó. Así que agreguemos un poco de relleno a nuestra barra de navegación también. Simplemente voy a hacer navbar dot view y luego este contenedor div que agregamos. Y mucho clásico PX. Eso se ve bastante bien. Ahora, vamos a dar a todas nuestras páginas un sutil color de fondo que coincida con el color de nuestra barra de navegación. Entonces voy a saltar al Explorador de archivos y abrir index.html. Voy a agregar una clase a nuestro elemento HTML. Bomber tiene clases de tonos de color que podemos usar, y todas están documentadas en el lado palmar. Bueno, voy a usar la clase tiene fondo, guión, éxito, luz de guión. Ahorra eso. Ahora tenemos este bonito color verde social en el fondo de todas nuestras páginas. 71. Notas (diseño): Ahora vamos a crear el diseño para nuestras notas usando el componente de tarjeta de bolo. Voy a saltar al sitio de audacia e ir a Componentes y cortar nuestra pantalla completa esto un segundo, no quiero desplazarse hacia abajo este ejemplo aquí, que tiene estos botones en la parte inferior, que podemos usar para agregar la capacidad editar y eliminar una nota. Voy a copiar este ejemplo aquí haciendo clic en copia. Y luego saltaré de nuevo a anotar bolas. Vamos a añadir esto a nuestra vista de notas. Por lo que vamos a ir a Vistas de fuente y ver las notas no se ven. Y voy a pegar eso dentro de este div sobre la parte superior de éste. Se sangró un poco y guarde eso. Y voy a deshacerme de esta cabecera en la parte superior. Entonces ese es este elemento de cabecera aquí. Así que nos libraremos de eso, guarde eso, y solo voy a habilitar el wrap de palabras por defecto. Entonces voy a ir al código y preferencias y configuraciones, buscar el wrap de palabras y ponerlo en encendido por defecto, eso es mejor. Ahora voy a deshacerme de todo dentro de este div con la clase de contenido. Así que deshazte de eso. Espe algo de Lorem solo escribiendo en lorem y luego golpeando Enter. Deberías ver esta abreviatura Emmet. Ahorra eso. Simplemente me deshago de este botón de guardar porque sólo vamos a necesitar una edición en el botón eliminar. Guarda eso, y vamos a ver cómo se verá esto con múltiples cortes en. Un truco rápido para hacer esto es simplemente agregar un v4 al div padre. Entonces antes de entonces sólo podemos hacerlo, acabo de escupir tres de estos. Y se puede ver necesitamos un poco de espacio entre cada nota. Así que mucha clase a este div con una clase de tarjeta de M, margen beta, tablero inferior. Ahorra eso. Estos se ven bastante bien. Vamos a asegurarnos de que se vean bien en una pantalla grande o en una pantalla pequeña? Sí. Bastante bueno. 72. Añadir formulario de nota (diseño): Empecemos a caer a lo alto de nuestra vista de notas con un área de texto en un botón que podemos usar para agregar una nueva nota. Por lo que de vuelta al sitio del molino de bolas y vamos a ir a formar y general. Voy a desplazarse hacia abajo para completar muestra agrícola, mostrar el código. Todo lo que voy a agarrar aquí es desde esta área de texto hasta estos botones. Así que desplácese hacia abajo el código que tiene un área de texto. Y sí queremos este div con una clase de campos que lo rodeen. Entonces seleccionaré de ahí a esta profundidad aquí abajo con los dos botones dentro de ella. Copiar eso. Pega esto por encima de nuestras notas. Todavía está dentro de este div con una clase de notas. Voy a pegar eso aquí, sangrar un poco y guardar eso. Ahora voy a quitar esta etiqueta aquí con el mensaje de texto que está aquí. Así que deshazte de eso. Y voy a deshacerme de esta casilla de verificación aquí a este div con una clase de campo. Entonces nos libraremos de eso, nos libraremos de estos dos botones de radio, que es este div aquí. Ahorra eso. Ahora voy a rodear el área de texto y los botones en un componente de tarjeta con un color de fondo. Así que voy a pegar que va a emparejar. Por lo que mucho div con una clase de tarjeta para darle un color de fondo, agregaremos una clase de tiene éxito de fondo Doc. Voy a seleccionar estos dos divs con una clase de campo, cortarlas, pegarlas dentro de este div, guardar eso, necesitamos agregar un poco de relleno aquí. Entonces vamos a sumar una clase de P dash cuatro, darle un poco de relleno y necesitamos un poco de margen en la parte inferior. Entonces muchas clases, MBA, margin-bottom, dash f5, salvo eso. Ahora voy a quitar este botón de cancelar. Por lo que eliminaré este div con una clase de control la cual tiene el botón de cancelar dentro de él. Ahorra eso. No quiero tirar de este botón hacia el lado derecho. Se puede hacer eso agregando una clase de is dash, dash, derecho a este día de la clase de campo. Ahorra eso. Y quiero cambiar el color y el texto de este botón. Sólo voy a dividirlo en múltiples líneas y cambiaré el texto dentro de él por nuevas notas. Digamos que cambiaremos el color de fondo agregando una clase de tablero de casa, fondo, guión, éxito, salvo eso. Por último, cambiemos el Marcador de posición en esta área de texto. Y de hecho, voy a cambiar esto en una etiqueta de autocierre como esa. Dividir los atributos y vamos a establecer el placeholder a nueva nota, salvo que esto se vea bastante bien en el escritorio. Luciendo bastante bien en el móvil también. 73. Array de notas (Ref) [Módulo 15]: De acuerdo, Así que nuestra página de notas se ve bastante guapo abajo hermosa. Ahora hagamos que esto funcione realmente agregando algunos datos y métodos. También vamos a convertir esta nota en un componente hijo. Vamos a agregar una propiedad calculada para mostrar el número de caracteres en cada nota. Y también vamos a configurar un evento personalizado usando emit. Bueno, en primer lugar, vamos a configurar un href donde podamos almacenar una lista de notas a la vista, notas vista de punto. Voy a desplazarse hacia abajo hasta la parte inferior y agregar nuestras etiquetas de configuración de script. Voy a crear aquí un comentario de bloque que diga notas, establece una constante llamada notas, establece eso igual a un href. Necesitamos importar este método ref. Por lo que muchos otros bloques comentan aquí que dice importaciones. Y de nuevo, estos comentarios son opcionales. No es necesario agregarlas si no quieres. Necesitamos importar ref desde la vista. Ahora vamos a configurar nuestra matriz de notas. Entonces pasaremos una matriz a este href. Cada elemento de la matriz será un campo de ID permitido de un objeto. Simplemente lo estableceremos para agregar mucho campo conceptual para el contenido de la nota. Voy a meter un poco de lorem ahí. Por alguna razón M, no está funcionando en este momento. Simplemente copiaré este Lorem de una nota codificada. Pega eso ahí. Mucha coma después de este objeto. Duplica las notas, deshazte de esta coma, establece el ID en id2. Simplemente cambiaré el texto de éste. Esta es una nota más corta. Nosotros ahorramos eso. Ahora vamos a mostrar estas notas en nuestra página usando una directiva V4. Ya tenemos una directiva V4 en este div con la clase de tarjeta que estamos usando para nuestras notas. Por lo que sólo voy a cambiar esto para ser para anotar en notas. Entonces usaremos notas como nuestro placeholder mientras recorremos estas notas o escribimos. Para configurar aquí. También necesitamos agregar una propiedad clave. Casi establece esto para señalar que este k siempre es único. Yo lo guardaré. Y ahora podemos ver dos notas en nuestra página. Y sólo tenemos que dar salida a nuestro contenido, que va a estar fuera notas dot content. Seleccionaré este texto aquí en esta tabla, la clase de contenido o llaves dobles rizadas. Y luego nota el contenido de puntos. Ahorra eso. Recargar. Ahora podemos decir notas A2 en la página que ahora vienen de nuestra matriz de notas. 74. Añadir un método de nota: Vamos a configurar un método de notas de anuncio que se dispara después de escribir algo en esta área de texto y hacer clic en el botón, que luego agrega esta nueva nota a nuestra matriz de notas, las que lo muestran en la página. En primer lugar, vamos a configurar un href, que podemos vincular a esta área de texto para que en realidad podamos tener acceso al contenido que el usuario ha escrito. Por encima de nuestra matriz de notas, voy a configurar una nueva columna llamada New Note. Establezca eso igual a un href con un valor predeterminado de una cadena vacía. Ahora vamos a encontrar esta constante a nuestra área de texto. Por lo que nos desplazaremos hasta el área de texto que está aquí. Fuera de la directiva modelo V. Ponga eso a nueva nota. Ahorra eso. Ahora si escribimos algo en este valor href, pulsa Guardar eso. Ya lo podemos ver en el área de texto. Vamos a volver a poner eso en una cadena vacía y guardarla. Ahora vamos a configurar un método que se dispara. Cuando hacemos click en este botón, saltaré al botón Añadir nueva nota, que está aquí. Dividiré los atributos en la etiqueta de apertura. Añadir un manejador de clics. Click activará un método llamado agregar notas. Y ahora necesitamos crear este método. Así que nos desplazaremos hacia abajo después nuestra configuración de matriz de notas este método const note es igual a una función de flecha. Por ahora, solo cerraré la sesión de la nota del anuncio, guarde eso. Abre la consola. Haga clic en este botón. Podemos decir que este método está siendo disparado porque podemos ver que este registro está siendo despedido. Ahora no queremos que el usuario pueda hacer click en este botón si el área de texto está vacía, porque de repente sólo se va añadiendo un nodo vacío. Desactivemos este botón cuando no haya nada en esta área de texto. Vamos a saltar a este botón, que está aquí. Podemos simplemente enlazar al atributo disabled y agregar condicionalmente este atributo disabled a la parte inferior. Sólo queremos agregar este atributo. Esta nueva nota, href es una cadena vacía. Para hacer eso simplemente no podemos hacer nota nueva. Porque si esa cadena está vacía, contará como un valor 0 o un valor falsy. Así que vamos a salvar eso. Ya podemos ver que este botón está deshabilitado. No podemos hacer clic en él. Y si tocamos algo, ahora podemos hacer clic en él. Ahora trabajemos en nuestro método de notas. En primer lugar, necesitamos un objeto con un ID y una propiedad de contenido con las propiedades conceptuales establecidas al contenido que se encuentra en el área de texto. Y luego empujar el objeto a estas notas tienen razón. Deberíamos entonces ver las notas en la página. Primero, vamos a configurar este objeto. Voy a crear una variable llamada nota. Establezca eso en un objeto. Y vamos a necesitar una propiedad de identificación. El concepto de propiedad. Ahora el concepto de propiedad que sólo podemos agarrar de esta nueva nota, href, que está enlazada al área de texto. Podemos simplemente establecer esta propiedad de contenido dos. Nuevo Nota valor de punto. Ahora para el ID, necesitamos algo único. Si lo desea, podría usar un paquete para generar un ID único. Uuid. Sólo voy a Google UUID npm. Usualmente uso esta versión UUID para el paquete. Puedes usar eso si quieres. Pero solo por simplicidad, solo voy a usar la marca de tiempo en milisegundos a partir de la fecha actual para generar este ID por encima de este objeto, primero voy a agarrar la marca de tiempo actual, así que sólo podemos hacer nuevo paréntesis de fecha. Y esto agarrará la fecha actual como objeto de fecha. Y luego para convertir eso en una marca de tiempo en milisegundos, solo podemos agregar punto, consigue tiempo, paréntesis. Y ahora voy a asignar esto a una variable. Por lo que sólo podemos hacer, vamos a la fecha actual es igual. Ahora esto realmente devolverá un entero. Voy a convertirlo en una cadena porque estamos usando cadenas aquí. Voy a configurar otra variable llamada ID. Casi establece eso igual a la fecha actual. Dot dos cadenas para convertir ese número en una cadena. Si queremos un tiro esto un poco, podemos deshacernos de la palabra dejar un poco una ley sangría. Simplemente no soy una coma. Después de la primera variable. Ahora podemos simplemente establecer esta propiedad ID a esta variable ID que configuramos aquí así como una taquigrafía ya que estos nombres son ambos iguales, solo podemos establecer esto a ID así. Ahora vamos a cerrar la sesión de esta nota y asegurarnos de que esto esté funcionando. Consola. Notas de registro de puntos. Ahorra eso. Añadamos un poco de texto aquí. Haga clic en el botón. Podemos ver que este objeto está siendo bloqueado. Sí, podemos ver la propiedad del contenido y también podemos ver el ID, que se ha generado. Con base en la marca de tiempo de la fecha actual. Ahora todo lo que tenemos que hacer es empujar este objeto a anotar. Por lo que aquí mismo deberíamos ver la nueva nota en la página. Para obtener acceso a estas notas, href, simplemente podemos hacer el valor de punto de no. Simplemente podemos hacer nota valor stop. Entonces para empujar este objeto a la matriz, solo podemos hacer push dot. Entonces nota. Salvemos eso y veamos si eso está funcionando. Voy a escribir una nota nueva. Haga clic en el botón. Sin embargo podemos ver la nota agregada a la página. En realidad tiene sentido que nuestra última nota esté en la parte superior de la lista. En lugar de empujarlo lo descambiará, lo que básicamente sólo lo pegará al inicio de los derechos que al final de la matriz, simplemente cambiaré la palabra push a on, minúsculas en turno. Ahorra eso. Y intentemos eso otra vez. Sí, eso está funcionando ahora. Lo está agregando a la parte superior. Ahora después de sumar las notas, podemos ver que el área de texto todavía tiene el mismo contenido en ella que acabamos de agregar. Como nota, vamos a borrar esta área de texto después de agregar el nuevo nodo simplemente estableciendo esta nueva nota href, que está enlazada al área de texto de nuevo a una cadena vacía. Por lo que sólo podemos hacer nueva nota, el valor es igual a cadena vacía. Veamos si eso está funcionando. Haga clic en el botón. Podemos ver que el área de texto se vacía. También podríamos usar una plantilla ref, para reenfocar esta área de texto después de agregar la nueva nota también. Para que el usuario pueda agregar fácilmente otra nota de inmediato sin tener que hacer click en esta área de texto. Vamos a saltar a los elementos del área de texto aquí. Mucho ref. Voy a poner eso a nueva nota ref. Ahora podemos usar este href para enfocar esta área de texto después de agregar la nueva nota. Así que vamos a saltar de nuevo a nuestro método add notes. El fondo aquí, solo podemos hacer nueva nota ref, valor de punto para agarrar el elemento de área de texto real. Y entonces sólo podemos hacer punto focus. Esto esperemos enfocar el área de texto después de agregar la nueva nota. Vamos a guardar eso y recargar. Asegúrate de que eso esté funcionando. Hola. Añadir unas notas nuevas. Esto no ha funcionado. Nueva nota ref no está definida. Simplemente desplázate hacia arriba y revisemos el href que agregamos. Ya sabes, href. Necesitamos realmente configurar un dato antes de poder utilizar esta plantilla ref. Después de esta nueva nota const, vamos a agregar otra columna establecida a nueva nota, HREF, establecer eso igual a f con un valor inicial de null. Ahorra eso. Y volvamos a recargar. Hola ahí. Haga clic en el botón. Eso parece haber funcionado. Ahora hemos agregado las nuevas notas. Hemos despejado el área de texto, y enfocamos el área de texto. 75. Componente de niños: nota: Este componente de notas de vista se está volviendo bastante largo. Ahora, vamos a estar agregando algo más de funcionalidad a cada nota individual, como mostrar el número de caracteres, mostrar un modal cuando se hace clic en el botón de borrar y enviar el usuario a la página de edición cuando se hace clic en el botón Editar. Entonces antes de que este componente de notas de vista se vuelva demasiado desordenado, vamos a crear un componente hijo para una nota individual. Voy a saltar al Explorador e ir a los componentes fuente. Vamos a crear aquí una nueva carpeta para todos los componentes relacionados con nuestras notas. Llamaremos a esto notas. Dentro de eso crearé un nuevo archivo llamado etiquetas de plantilla de vista de puntos. Y voy a saltar de nuevo para ver notas vista de punto. Casi selecciona todo este div con una clase de tarjeta que está mostrando nuestra nota. Sólo copia eso. Pega en las etiquetas de plantilla. Arreglar la sangría. Simplemente eliminaré el V4 y los atributos clave. Ahorra eso. Ahora vamos a saltar de nuevo a ver las notas vista de punto, e importar este componente. En nuestra sección de entrada, vamos a hacer importar notas de componentes de slash, notas de slash, nota de slash, dot Vue. Ahorra eso. Ahora vamos a desplazarnos hasta este div con la clase de tarjeta, donde estamos mostrando la nota anterior que usaremos nuestro componente de nota en su lugar. Así que tenga en cuenta, si podemos hacer de esta una etiqueta de autocierre, mueva la etiqueta de cierre a una nueva línea. Ahora solo podemos copiar la directiva VFR y la propiedad, pegarla en este componente de nota. Ahora solo podemos deshacernos de este div con una clase de tarjeta completamente. En guardar esa recarga. Vemos un error aquí, no se pueden leer propiedades de contenido de lectura indefinida en nuestra app está roto. Y eso es porque en la vista de punto de nota en nuestra plantilla, estamos tratando de acceder a esta nota objetos y a esta propiedad conceptual desde los objetos. Bueno, este objeto nodo no existe dentro del contexto de estos componentes de vista de puntos de nota. Tenemos que pasar esto hacia abajo desde las notas de vista vista punto vista, hacia abajo para anotar vista de punto usando un prop. 76. Propósitos (Nota): Vamos a pasar por los objetos de notas, que estamos usando como titular del lugar en nuestro bucle V4 aquí. Abajo desde la vista las notas no se ven hacia abajo para anotar la vista de punto. Por lo que esa nota dot Vue tiene acceso a anotar contenido de puntos. No ves componente de nota aquí. Lote de prop llamó notas y establece que igual a anotar en guardar eso. Ahora si saltamos a anotar punto view, necesitamos recibir ese prop. Necesitamos agregar scripts, etiquetas de configuración, mucho comentario de bloque, que dice apoyos. Ahora ¿recuerdas cómo inicializamos nuestros apoyos? Eso es correcto. Creamos una constante llamada props. Nos fijamos eso igual para definir los apoyos. Podemos pasar nuestras indicaciones aquí, ya sea una matriz o un objeto. Voy a usar un objeto para ello. Vamos a recibir una prop llamada nota. El apretado va a ser un objeto. Definitivamente necesitamos este prop para que nuestro componente se renderice correctamente. También debemos agregar requerido para hacer de este un prop requerido. Ahorra eso. Y ojalá esto debería estar funcionando. Ahora, voy a recargar todavía Todo es trabajo. Y de nuevo, podemos ver nuestro contenido de nota correcta viniendo de la matriz de componentes padre aquí. Vamos a asegurarnos de que aún podamos añadir una nueva nota. Todavía podemos sumar una nueva nota. 77. Computado (la longitud de la Nota): Agreguemos una propiedad computada que muestre el número de caracteres que hay en cada nota debajo del contenido de la nota. Primero, vamos a montar la maqueta. Así que la vista de punto de nota final debajo donde estamos escupiendo el contenido, voy a agregar un div. Y luego dentro de eso vamos a añadir una pequeña etiqueta. Por ahora, solo pondré los textos XXX caracteres. Ahorra eso. Podemos ver eso en la página. Para mover este texto hacia la derecha, voy a agregar una clase al div de dash. Derechos de Dash para darle al texto un color gris claro, voy a añadir una clase de texto, salpicar gris luces Dash, guardar eso. Al menos las clases son de bola en el documentado en ese sitio web. Y solo para agregar un poco de margen en la parte superior, muchas clases vacías para margen top dash para ahorrar eso, ahora en realidad no necesitamos una propiedad computada para mostrar el número de caracteres. Podríamos simplemente hacer dobles llaves rizadas y luego notas, contenido de puntos, longitud de punto. Ahorra eso. Podemos ver que funciona. No obstante, quiero usar una propiedad computada en algún lugar de nuestra app solo para recordarnos cómo configuramos estos, eliminemos note dot content dot length. En cambio, crearemos una propiedad computada llamada longitud de caracteres, que muestra aquí el número de caracteres de la nota. Vamos a desplazarse hacia abajo y configura esta propiedad computada llamada carácter como. Ahora, ¿recuerdas cómo hacer esto? Si lo desea, puede pausar el video y ver si puede tener esto por su cuenta. ¿ Lo lograste? Si no, no te preocupes. Entonces para agregar una propiedad computada, antes que nada, necesitamos importar el método computado desde la vista. Por lo que muchas entradas, comentar, voy a importar computado desde la vista. Y saltaré al fondo. No sé el comentario de bloque que dice que longitud del personaje establece aquí una propiedad computada. Queremos llamar a este carácter longitud, va a crear una constante llamada longitud de carácter. Vamos a establecer eso igual al método computado, y luego pasaremos otro método a este método. Ahora todo lo que tenemos que hacer aquí es devuelto algo. Queremos devolver la longitud de la propiedad conceptual, que es en esta nota prop que estamos pasando hacia abajo desde las notas de vista vista vista punto. Recuerda cuando estábamos en sección de script para acceder a un prop, sí necesitamos usar estos apoyos. Objeto. Para acceder a esta nota prop. Podemos simplemente hacer indicaciones puntonota. Entonces para acceder al concepto de propiedad dentro de eso, solo podemos hacer contenido de puntos. Queremos recortar la longitud de eso. Queremos devolver esto. Por lo que sólo podemos agregar retorno a la acción. Ahorra eso, recarga. Esto parece estar funcionando. No obstante, una cosa que podrías notar es si creamos una nota pero solo tiene un carácter, entonces todavía dice uno de los personajes. Sería mejor que dijera un personaje. Podemos adaptar nuestra propiedad computada para escupir esta palabra también. Basado en el número de caracteres. Voy a saltar a nuestra propiedad computada. Antes de hacer eso, déjame saltar a nuestra plantilla. Quita aquí los caracteres de la palabra y ahora sólo vemos el número. Vamos a desplazarse hacia atrás hacia abajo hacia nuestra propiedad computada antes de devolver el valor, voy a configurar una variable llamada descripción. Y vamos a establecer esto a carácter o caracteres dependiendo de la longitud de la nota. Y podemos usar una declaración ternaria if para hacer esto. Por lo que podemos hacer let description iguala si puntales dot, dot content dot dot dot length es mayor que uno, entonces podemos usar los caracteres de la palabra. De lo contrario, usaremos la palabra carácter. Ahora sólo podemos depender de esta variable de descripción, ya sea caracteres o carácter, la longitud que estamos dando salida aquí. Entonces voy a devolver aquí una cadena de plantilla. Coloca este props.net.content longitud de punto, dólar, llaves rizadas así, mucho espacio y luego permitió nuestra descripción. Así dólar llaves rizadas y luego descripción. Ahorra eso. Eso no funciona. Podemos ver 199 caracteres. Un personaje, la nota que sólo tiene un carácter. Ahora qué duplicar un poco de código, un pide punto, punto contenido dot longitud de punto. Podríamos ordenar esto un poco poniéndolo en una variable. Entonces en la parte superior aquí permitido, Vamos, llamémoslo longitud es igual a prop stop notes dot content, dot length. Y luego reemplazaré props.net.content dot length, tanto aquí como aquí. Presionaré el Comando D para seleccionar ambos. El atajo podría ser diferente en tu plataforma. Simplemente reemplace eso con estas longitud variable. Guarde eso, asegúrate de que todavía esté funcionando. Vemos personajes. Si hay más de un personaje, carácter, es sólo un personaje. 78. Eliminar nota (Emit): Vamos a permitir que se elimine una nota cuando hay botón de eliminar se hace clic. Ahora que esta nota está en un componente hijo, note dot Vue necesitará emitir un evento de la vista de punto de nota. Cuando se hace clic en el botón. A continuación, escuche hacia fuera para ese evento en las notas de vista vista de punto, y luego dispara otro método aquí, que luego elimina la nota de la matriz de notas. Desde nuestras notas arrays en este par de componentes o no en este componente hijo. Así que primero vamos a desencadenar una vista de punto de nota final de método local. Cuando se hace clic en este botón eliminar, encontremos el botón Eliminar en la plantilla, y eso está aquí. Voy a dividir los atributos en ese lote de manejador de clics a eso. También usaré el modificador preventivo para evitar que este enlace se comporte como un enlace y tratar de enviarlos a una página diferente. Animal activa un método local llamado handle, delete clicked. Vamos a crear este método. Permitido mucho comentario de bloque aquí. Manejar eliminaciones clicadas configurará este método. Entonces const handle delete clicked equivale a una función de flecha. Por ahora solo voy a cerrar la sesión manejar eliminar, hacer clic, y guardar eso. Haga clic en el botón Eliminar. On. Sí, podemos ver que ese método está siendo despedido. Por lo que ahora podemos emitir un evento personalizado de este método. Pero antes que nada, necesitamos configurar nuestra matriz de emits. ¿ Recuerdas cómo hacemos eso? Un poco como cómo configuramos nuestros apoyos. Quieres probarlo por tu cuenta, entonces siéntete libre de pausar el video. Pero de todos modos, voy a añadir un comentario que dice emite. Para configurar nuestros límites, podemos crear una constante llamada emit, configurarla igual al método define emite. Podemos pasar todas nuestras imágenes aquí en una matriz. Así que vamos a definir un emit llamado delete clicked. Ahorra eso. Ahora podemos emitir este evento desde este componente. Así que de vuelta a nuestro mango eliminar clips método. Ahora podemos simplemente hacer emiten paréntesis y luego eliminar clicado. Ahorra eso. Asegúrate de que no tengamos errores. Ahora podemos escuchar este evento delete clicked en el componente padre vista notas vista punto. Saltemos a ese componente. Saltar a nuestro componente de notas aquí. Se me permite manejador de eventos personalizado aquí. Entonces delete clicked, que es el nombre usamos para nuestro mandato cuando recibimos ese evento, vamos a desencadenar un método en este componente activará un método llamado delete note. Vamos a crear ese método. Descarga en la parte inferior. Mucho comentario de bloque que dice Borrar Nota. Podemos configurar este método, const delete notes es igual a la función de flecha. Vamos a cerrar la sesión eliminar nota. Por ahora, salva eso. Haga clic en el botón Eliminar. Podemos decir que este método en el componente padre está siendo disparado. No obstante, en este punto, ¿cómo sabemos qué nota eliminar de la matriz? Necesitamos algo para identificar la nota que queremos eliminar. Podríamos usar la propiedad ID. Si saltamos de nuevo a la vista de punto de nota, podríamos pasar el ID de nota junto con esta imagen. Podemos simplemente agregar un segundo parámetro aquí. Podemos agarrar la identificación de este apunte de nota que estamos pasando hacia abajo. Esto va a ser en props dot note, dot ID. Aquí adentro. Podemos simplemente hacer apuntes puntuales en guardar eso. Ahora vamos a saltar de nuevo al componente padre denota vista de punto hacia abajo a este método delete note. Podemos pasar este parámetro aquí. Llamémoslo ID para eliminar. Vamos a cerrar la sesión y asegurarnos de que está pasando. Entonces ID para eliminar, guarde eso. Voy a recargar, haga clic en el botón Eliminar. Sí, podemos ver Delete Note Id1, que es el ID de la primera nota. Si hacemos clic en el botón Eliminar en la segunda nota, se puede decir eliminar saber id2. Sabemos que este ID se está pasando correctamente. Ahora hay una serie de formas en que podríamos eliminar las notas de la matriz. Podríamos averiguar el índice de las notas con base en el ID, y luego eliminar el ítem que se encuentra en el índice. Si queremos utilizar una solución de una línea que podamos usar filter para establecer esta matriz de notas en sí, pero filtrada para que solo se devuelvan las notas que no tienen este ID. Lo que podemos hacer aquí, vamos a sobrescribir esta matriz de notas ref. Para acceder a ese href no podemos hacer el valor de punto. Eso es sobrescribirlo. Sólo podemos hacer iguales. Y vamos a volver a hacer el valor de puntos de no. Pero esta vez lo vamos a filtrar. Así filtro de puntos. Primero necesitamos agregar nuestro placeholder, que se usará mientras estamos haciendo un lazo a través de la matriz, ya que está mirando cada elemento en la matriz. Por lo que sólo podemos usar nota para eso. Entonces podemos agregar una función de flecha, que será disparada por cada nota en la matriz a medida que estamos haciendo un lazo a través de ella. Y entonces solo podemos especificar lo que queremos devolver. Simplemente estiraré esto en un minuto. Vamos a devolver solo elementos en la matriz donde notes dot ID no es igual a este ID que estamos pasando a esta función. Por lo que no es igual a id2, suprimir. Creo que eso debería hacerlo. Así que vamos a salvar eso. Recargar. Haga clic en Eliminar. Y ahora podemos eliminar nuestras notas. 79. Pinia: configuración y estado [módulo 16]: Creo que ahora es un buen momento para agregar administración estatal a nuestra app usando penny up. En términos generales, si vas a agregar administración estatal a tu app, cuanto antes mejor. Porque agregar la administración estatal a una app, que ya es realmente complicada, puede traer muchos dolores de cabeza. Pero esta vez vamos a instalar un centavo desde cero en cambio todo desde cero porque no elegimos agregarlo a nuestro proyecto automáticamente. Vamos sólo a Google penique. El centavo un sitio web. Empieza y voy a saltar para empezar. En primer lugar, necesitamos instalarlo con NPM o Yarn. Voy a usar npm. Por lo que tenemos que saltar a nuestra terminal. Mata al proceso sordo con Control C. Ejecutar npm install, penique, eso está instalado. Así que vamos a lanzar nuestra aplicación de nuevo con npm run dev, cerrar la terminal. Lo siguiente que tenemos que hacer es crear una pedia, la tienda raíz, y pasarla a la app. Hacemos esto en main.js. Abriré el Explorador e iré a fuente y main.js. Entonces primero tenemos que importar, crear centavo encendido desde Pena. Voy a copiar esta línea y la pegaré después esta importación crear a partir de la línea de vista , pegue eso ahí. Y ahora solo necesitamos activar el método estadounidense en nuestra aplicación y luego activar este crear penique, un método dentro de eso. Después de que esto crea contorno, solo voy a agregar paréntesis de uso de puntos. Y luego dentro de eso sólo voy a crear un paréntesis. Vamos a guardar eso, asegurarnos de que no tengamos ningún error. Recarguemos la app. No hay errores. Entonces ahora necesitamos crear un centavo un tallo. Voy a volver a saltar al centavo un sitio. Voy a saltar hacia atrás a lo que es centavo una broma al ejemplo básico. Y nos da un ejemplo básico aquí. Puedes poner tu centavo una tienda archivos donde quieras. Pero parecen recomendar ponerlos en esta carpeta de tiendas. Vamos a crear una nueva carpeta. La carpeta fuente llamada tiendas creará aquí nuestro archivo STL. Puedes llamar a esto como quieras, pero lo voy a llamar notas de tienda, porque esta es una tienda para nuestras notas y todos los métodos relacionados con esas notas. Ahora sólo voy a copiar el código de este ejemplo básico. Pega eso aquí. Todo esto está haciendo básicamente es usar este método define tienda para configurar nuestra tienda. Y ponemos aquí todas nuestras acciones y getters estatales. Y luego solo asignamos esa tienda a esta constante y exportándola para ponerla a disposición de cualquier componente de nuestra app. Entonces vamos a dar este nombre constante, un nombre más significativo. Por lo que podríamos llamar a esta tienda estadounidense notas. Y también vamos a darle aquí a este nombre un nombre más significativo que podríamos llamar a esta tienda notas. Por ahora, eliminemos el objeto de esta acción en estos dos comentarios. Y sólo nos enfocaremos en el estado para empezar. Pongamos esto en múltiples líneas. Y ahora podemos copiar notas o escribir al estado en la tienda. Voy a cerrar main.js y saltaremos a ver notas. Vista de punto donde actualmente tenemos en las notas están aquí mismo. Solo voy a copiar los dos objetos dentro esta matriz por ahora, copiar esos, saltar. Pero para almacenar Node.js establecerá una propiedad llamada notas. Establezca eso igual a una matriz. Simplemente pegaremos esas notas en esta matriz de notas. Ahorra eso. Ahora deberíamos poder importar esta tienda a cualquiera de nuestros componentes donde puedan obtener acceso a esta matriz de notas, que está en nuestro estado en esta tienda. Recuerde que el estado es sólo para almacenar datos. 80. Usa nuestra tienda: Vamos a importar este penniless aunque hemos creado en vista notas vista punto, página de notas. Y usa la matriz de notas que hay en nuestra tienda para mostrar nuestras notas en la página. En lugar de usar la matriz de notas, que hemos codificado en la vista de notas de punto vista. En primer lugar, necesitamos importar nuestra tienda a las notas de vista vista vista punto. Queremos importar esta constante aquí, usar notas de tienda. Así que vamos a saltar a ver notas vista de punto. Mira nuestros insumos y solo agregaremos llaves rizadas importadas. Usa notas robadas de en tiendas de slash, tienda de slash sabe, guarda eso. Recargar. Para obtener acceso a la tienda en nuestro componente, necesitamos asignarla a constante o variable. Mucho. Otro comentario de bloque aquí que dice tienda. Y crearemos una constante llamada notas de tienda. Asignar eso para usar notas de tienda, paréntesis. Ahorra eso. Ahora que hemos hecho eso, deberíamos poder ver nuestra tienda en nuestra vista herramientas dev. Así que vamos a hacer clic en esta pequeña flecha doble y luego ver. Dice en la consola última tienda de rosquilla instalada. Y podemos ver cómo robó su clic libre sobre eso. Podemos decir que nuestras notas matriz todos los datos de cada nota. Ahora vamos a sacar estas notas de la matriz de notas que está en nuestra tienda. En lugar de desde la matriz que está codificada en las notas de vista vista vista punto aquí, podemos simplemente saltar a nuestro componente de notas. En lugar de v para nota en notas. Podemos hacer notas V4 en entonces el nombre de nuestra tienda, que es notas de tienda. Podemos hacer notas de tienda sobre desde esa tienda a las que queremos acceder las notas son correctas. Por lo que sólo podemos hacer notas de punto. Ahorra eso, recarga. Todavía podemos ver en las notas de la página, excepto que ahora vienen de nuestra tienda. En lugar de esta matriz, que está en nuestra vista nota stop view componente, ahora deberíamos poder simplemente deshacernos de esta nota. Así que bien, salvo eso. Todavía podemos ver nuestras notas en la página. Si vamos a las DevTools, cambiamos el contenido en una de nuestras notas. Podríamos decir que nuestras notas se actualizan en tiempo real en la plantilla también. Simplemente recargaré eso. Si saltamos a almacenar notas, dot js, cambia el contenido de una de estas notas. Simplemente eliminaré algunos de los textos y lo guardaré. Mencioné anteriormente en esa recarga en caliente no parece estar funcionando en este momento. No vimos esa recarga caliente cuando cambio el contenido de esta nota en la tienda. Y también te mostré que hay una guía, el centavo, un sitio. Nos desplazamos aquí abajo, reemplazo de módulo, e intentamos conseguir este trabajo en base a este ejemplo. No funcionaría. Todavía no he logrado encontrar una manera de conseguir este trabajo en el momento en que estoy grabando esto, pero siéntete libre de darle una oportunidad. A lo mejor está funcionando ahora en el futuro donde estás. Y si encuentras una solución, por favor compártala con esta conferencia. Si encuentro una solución y mucha conferencia a este curso explicando eso. 81. Acción : añade una nota: Agreguemos una acción a Penny, una tienda, que nos permitirá agregar una nueva nota a esta nota, que está en nuestro estado y nuestras opiniones las almacenan, agregando las nuevas notas a la página, ya que estas notas ya están llegando de estas notas justo en nuestro estado. Ahora, si tratamos de añadir unas notas nuevas en este momento, vemos que no se define un error notas. Y eso es porque si vamos a ver notas vista punto en este método Add note en esta línea aquí, tratamos de agregar un nuevo objeto de nota a esta matriz de notas ref, que ya no existe aquí. Pero ahora queremos agregar un nuevo objeto de nota a esta matriz de notas, que está en nuestra tienda de opinión. Saltemos de nuevo al centavo un sitio y saltemos a lo que es centavo un ejemplo básico. Aquí nos muestra cómo agregamos acciones a nuestra tienda. Sólo tenemos que añadir un objeto llamado acciones después de nuestro estado y podemos colocar todas nuestras acciones aquí. Recuerdo que las acciones son solo métodos que nos permiten acceder a los datos en nuestro estado y luego modificarlos. Vamos a saltar de nuevo a la tienda Node.js. Y por ahora, simplemente colapsaré el método y objeto del estado simplemente haciendo clic en esta pequeña flecha. Después de esto, agregaremos un objeto llamado subastas. Y ahora podemos colocar todas nuestras opciones aquí. Vamos a crear una nueva opción llamada nota impar. Por ahora, solo voy a cerrar la sesión de nuestras notas y decir que ahora podemos desencadenar esta acción desde cualquier lugar dentro de nuestra app. Vamos a activarlo desde las notas de vista vista vista de punto. Podríamos simplemente desencadenar este oxígeno directamente en nuevas notas pone aquí en este manejador de clics. Y estamos tirando en una tienda como notas robadas. Entonces para acceder a nuestra tienda, solo podemos empezar las notas de tienda. Y luego para acceder a la acción acabamos de iniciar notas. Podemos empezar apenas punto nota impar. No necesitamos agregar paréntesis a este método cuando lo activamos en nuestra plantilla. Así que ahorremos eso y veamos si eso está funcionando. Voy a escribir una nota y hacer clic en nuevas notas. Sí, podemos ver que notaría estar bloqueado. Esto está disparando con éxito nuestra acción. No obstante, si saltamos hacia abajo a nuestro método de nota de anuncio anterior, que está en la vista notas vista de punto. Tenemos estas dos líneas en la parte inferior, ésta que está despejando la nueva nota ref, las que despejan el área de texto. Esta línea, que está enfocando el área de texto mediante esta plantilla REF que hemos establecido que hemos agregado al área de texto aquí. Ahora no vamos a tener acceso a este modelo V, declararlo fuera, toda esta plantilla ref para enfocar el área de texto desde dentro de nuestra tienda. Tiene sentido seguir activando este método local, agregar notas, cuando hacemos clic en el botón Agregar nueva nota y luego activar nuestra acción desde aquí, para que aún podamos disparar estas dos líneas en el bottom, que van a despejar el área de texto y enfocar el área de texto. Así que vamos a cambiar ese manejador de clics en la bandeja de entrada de los nuevos cuadernos de arte y lo que estaba activando este método de notas locales comentará todo este código que estaba configurando el nuevo objeto node. Y luego al cambiarlo a las notas array ref, que teníamos aquí antes. Entonces activará la acción en nuestra tienda. En cambio, sólo podemos hacer notas de tienda. Nota, cuando estamos activando una acción desde nuestra sección de script, sí necesitamos agregar paréntesis. Así que ahorremos eso y veamos si esa acción en nuestra tienda todavía se está activando. Voy a recargar, teclear una nota y hacer clic en el botón. Y sin embargo podemos decir, yo sabría ser exhibida, bueno, esta acción necesita saber qué deberíamos realmente sumar a nuestras notas justo en el estado. Tenemos que pasar realmente el contenido de esta nota que se ha escrito en el área de texto a esta acción. Por lo que podemos configurar una nueva nota objetos basados en su contenido y luego agregarlo a nuestra matriz de notas que está en el estado. Podríamos hacer esto usando parámetros. 82. Acción (con parámetros Parámetros): añade una nota: Necesitamos pasar el nuevo contenido de notas desde view notes dot view to our new add notes action que está en nuestra tienda, antes de poder configurar una nueva nota objetos y agregarla a esta matriz de notas que está en nuestro estado. Podemos pasar parámetros a acciones tantos parámetros como nos gusten, igual que podemos con cualquier función en JavaScript. Así que vamos a saltar de nuevo a View note stop view. Y nuestro nuevo contenido de nota está en esta nueva nota href, que está vinculada a esta área de texto. Cuando activamos nuestra acción aquí, solo podemos hacer almacenar notas para agregar notas y luego pasar en nuevo valor de punto de nota, y guardarlo. Ahora si saltamos de nuevo a nuestra tienda notas dot js en esta nota oxígeno, podemos recibir este parámetro aquí. Podemos darle cualquier nombre que queramos, por lo que podríamos llamarlo nuevo contenido. Asegúrate de que esto esté pasando. Vamos a cerrar la sesión aquí. Así que cuando note contenido, guarde eso, recargue. Haga clic en el botón en. Sí, eso está funcionando. Podemos ver que nuestra acción está cerrando la nota que acabamos de escribir. Ahora solo necesitamos configurar un nuevo objeto de nota como este con un ID en una propiedad conceptual y luego agregarlo a estas notas ya en nuestro estado. Así que vamos a saltar de nuevo a ver las notas que no ven. Y llamemos a este código que comentamos . Ahorra eso. Y vamos a pegar eso en nuestra acción aquí. Quita los comentarios, arregla la sangría, y vamos a necesitar modificarlo un poco. Por lo que esta línea sigue bien. Eso todavía va a conseguir la fecha actual en esta línea está bien. Solo va a convertir esa marca de tiempo en una cadena y asignarla a esta variable ID. Permítanme ponerme en sus notas. Los objetos ya estaban configurando nuestro ID. Eso está bien. Pero cuando establecemos el concepto de propiedad, ya no queremos agarrar esto de las nuevas notas de valor de punto. Queremos agarrarlo de este parámetro que estamos pasando en contenido de notas nuevas. Copiemos eso, pegue eso aquí. Y luego cuando desmayamos estos nuevos objetos de notas a nuestra matriz de notas, ahora queremos empujarlo a matriz de notas que está en nuestro estado. Podemos acceder a las propiedades de los datos en nuestro estado por dentro y oxígeno usando la palabra clave this. Un poco como lo hicimos en la API de Opciones para acceder a nuestra matriz de notas, que se acaba de llamar notas. Podemos simplemente hacer estas notas de punto. Y luego queremos desdesplazar estos objetos de notas a esta matriz. Por lo que sólo podemos hacer estas notas puntuales sobre turno, paréntesis, nota, y ahora sólo podemos deshacernos de esta línea. Y ahorremos eso y veamos si esto está funcionando. Escriba una nota nueva. Haga clic en el botón en. Sí, está funcionando. Lo vemos agregado a la página en nuestras herramientas dev. Podemos decir que se ha agregado a nuestras notas o escribe aquí también en nuestro estado. 83. Acción : elimina la nota: Vamos a configurar una acción en nuestra tienda de opinión para eliminar un nodo. Y nuestro botón eliminar está en nuestro componente de nota. En componentes notas o nota punto vista. Digamos qué está sucediendo ahora mismo con esta funcionalidad de eliminación. En este botón eliminar aquí tenemos este manejador de clics que va a disparar este método local manejado eliminar clips. Ese método está aquí. Y luego dentro de eso estamos emitiendo un evento personalizado llamado delete clips. Estoy pasando el DNI de las notas que queremos eliminar. Luego, en el componente padre denota la vista de puntos, el desplazamiento hacia arriba hasta el componente de notas. Estamos escuchando este evento cuando lo recibimos, que están creciendo este método delete note. Con eso quitando la nota de la matriz basada en esta idea que estamos pasando en estas notas locales u ocho ya no existe aquí. Esto no va a funcionar de todos modos por el momento. Pero de todos modos, una vez que comenzamos usar la gestión estatal en nuestra app, ya sea a través de composable, UX o penique o como estamos usando. No necesitamos preocuparnos por emitir eventos personalizados desde componentes hijos a par de componentes y luego escuchar esos eventos antes de activar un método. Porque recuerda, todos los componentes de nuestra app, por muy profundamente anidados, tienen acceso a todo lo que hay en nuestra tienda, incluyendo todo en nuestro estado y todas nuestras acciones. Vamos a configurar una nueva acción de borrar notas en nuestra tienda y activarla directamente en vista de puntos de nodo sin necesidad de emitir ningún evento personalizado o escuchar esos eventos. De acuerdo, así que vamos a saltar a la tienda Node.js. Y simplemente colapsaré esta subasta de notas en una coma y agregaré una nueva acción llamada eliminar notas. Para eliminar la nota de notas o escribir en nuestro estado, vamos a necesitar el ID. Por lo que configuraremos esto para recibir ese ID con una variable llamada ID para eliminar. Simplemente cerraremos la sesión ID para eliminar también. Id para eliminar y guardar eso. Ahora, nota punto vista. En lugar de activar este método local manejado realmente se hace clic cuando hay botón de eliminar se hace clic, vamos a importar nuestra puerta de Penny aquí. Activa esta nueva Acción, Borrar Nota directamente. En cambio, voy a saltar a ver notas dot Vue. Copia esta línea donde estamos importando nuestra tienda. Pega eso en la parte superior de la vista de punto de nota que necesitamos para obtener acceso a nuestra tienda, como lo hicimos en las notas dot view asignando nuestra tienda a una constante. Por lo que voy a copiar este comentario en el código también desde las notas de vista vista dot view. Y vamos a pegar que después de nuestras indicaciones sobre los mitos, ahora tenemos acceso a nuestra tienda en esta notas dot componente Vue, ahora podemos saltar a este botón Eliminar, activar esta acción Eliminar nota directamente. Nos libraremos de este identificador delete clicked method call, y en su lugar simplemente haremos notas de tienda, Dot Delete, Note. Tenemos que pasar en la nota ID. Recuerda que estamos pasando por abajo el objeto de notas con un prop aquí. Por lo que nuestro ID de nota está disponible en puntales dot, dot ID. Acabo de anotar ID de punto si estamos en la plantilla para que sólo podamos pasar en nota HIZO ahorrado eso. Y ojalá nuestra Action Delete Note deba estar recibiendo el ID y cerrar la sesión está fuera. Entonces veamos si eso está funcionando. Haga clic en el botón Eliminar. Déjame ver que el ID1 está bloqueado. Haga clic en el otro. ¿ Qué es enemigo? Ver id2 siendo bloqueado. Ahora vamos a saltar de nuevo para anotar vista de puntos y hacer algunos ordenando. Porque ya no necesitamos este método manejado delete clips. Ya no lo estamos usando. Tampoco necesitamos definir delete clicked como un emite porque ya no estamos emitiendo eso, solo podemos eliminar nuestro código emite en el comentario por completo. Ahorra eso. Y si saltamos a ver notas vista de punto, desplázate hacia arriba hasta el componente de nota. Ya no necesitamos escuchar este evento de retraso clicado. Ya no lo estamos emitiendo desde la vista de punto de nota. Para que podamos quitárselos también. Ahorra eso. Y si nos desplazamos hacia abajo aquí, ahora ya no disparamos este método delete note. Así que solo voy a copiar el código desde dentro de este método y luego simplemente eliminar este método en el comentario también. Ahorra eso. Ahora vamos a saltar a almacenar Node.js y pegaremos este código en este método delete note. Sólo tenemos que ajustar esto un poco. Ya no va a filtrar nope, detener valor y luego asignar esa matriz filtrada de nuevo al valor de parada de notas. Ahora queremos hacer eso con estas notas ya que está en nuestro estado. Nuevamente, podemos simplemente reemplazar este valor de puntos Snopes. Seleccionaré ambos presionando Alt. En cambio, sólo podemos hacer estas notas de punto. Esto va a agarrar las notas enteras están justo en filtrarla en base a los criterios aquí. Y va a devolver todas las notas donde el ID de la nota no es igual al ID que estamos pasando aquí. Estos nombres de variables siguen siendo los mismos, así que no creo que necesitemos hacer más cambios. Vamos a ahorrar eso y veremos si esto está funcionando. Voy a recargar, haga clic en el botón eliminar y podemos ver que se elimina la nota, y también vemos el objeto eliminado en nuestras herramientas dev también. Si elimino éste, ahora vemos una matriz vacía y nuestras herramientas dev. 84. Edita la página de la nota y ruta: Ahora podemos crear, leer y eliminar nuestras notas. Actualmente no podemos actualizar nuestras notas. Completemos nuestra bruta configuración. Crear, leer actualizar, eliminar creando una nueva página de edición de notas que nos permitirá editar una nota y guardarla. Para esto, vamos a estar agregando una nueva acción a nuestro penique una tienda y también nuestro primer captador. Pero por ahora acabemos de configurar una nueva ruta en la página para editar una nota. Voy a saltar a nuestro explorador. En la carpeta vistas. Voy a crear un nuevo archivo llamado View Edit note, no ver. Agregaremos nuestras etiquetas de plantilla. Para empezar. Solo voy a agregar un div con una clase de edición, un guión notas dentro de esa mucha etiqueta H1 que solo dice editar notas. Ahorra eso. Y ahora necesitamos configurar nuestras rutas. Así que vamos a saltar al router fuente, index.js. Lote de nueva ruta aquí después de la ruta de las pocas notas, voy a seleccionar todo lote de prensa Alt Shift y atajo hacia abajo podría ser diferente para que duplique eso. Y vamos a establecer la ruta para editar nota con el fin de seguir esta ruta, para saber qué notas que realmente vamos a editar carga en la página, entonces vamos a necesitar pasar una ruta parámetro a esta parte. Entonces para hacer eso solo podemos puntear slash y luego dos puntos, y luego el nombre de un parámetro, o simplemente podríamos llamarlo ID. Entonces en otras palabras, podríamos visitar editar notas slash id uno, y luego podemos agarrar el ID, ID uno en esta vista y luego utilizarlo para agarrar la nota apropiada en nuestras notas o escribir en nuestro estado en nuestra tienda, y luego mostrar los conceptos de estas notas en un área de texto en esta página para que luego podamos editarla y guardarla. Y vamos a cambiar el nombre de esta ruta para editar notas, necesitamos importar nuevo componente. Por lo que voy a duplicar esta importación pocas notas línea y reemplazar ver notas con vista editar nota. Y luego copiaré este nombre, veré editar nota y pegarla aquí. Yo lo guardaré. Ahora deberíamos poder visitar un camino como lo hice anoté slash ID uno y obtener dos nueva página de edición de nota. Ahora tenemos que poder llegar a esta página sin tener que escribir en la barra de direcciones. Enganchemos estos botones Editar. Sólo voy a cerrar todo aquí excepto, no, no veas. Y encontremos nuestro botón de edición. Y eso va a romper esto en nuevas líneas y luego dividir los atributos en la etiqueta de apertura. En realidad podemos simplemente cambiar esto en un componente de vista de enrutador en lugar de una etiqueta. Así que cambiemos el nombre de la etiqueta al enlace del router. Asegúrese de que la etiqueta de cierre sea renombrada también. Y ahora sólo podemos empezar un prop a esto para decirle a dónde ir. Voy a usar una cadena de plantilla para hacer esto usando alrededor de seis para que podamos sacar el ID. Queremos ir a la ruta slash edit note, que configuramos en nuestro archivo router, y luego slash. Y luego usaremos llaves rizadas de dólar para emitir el ID. Y de nuevo, estamos pasando los objetos de notas a este nodo componentes de vista de punto. Utilizando estas notas prop, podemos obtener acceso a la ID out prompts dot note, DID, o en la plantilla solo nota dot ID. Aquí adentro. Podemos simplemente poner notas, puntos ID, y vamos a guardar eso. Vea si estos botones Editar están funcionando. Haga clic en el primer botón de edición y aún así escribió la ruta editar notas slash ID. Saltar hacia atrás, haga clic en el segundo botón de edición. Ahora en la ruta editar nota slash id2, podemos acceder a este parámetro de ruta que hemos nombrado en nuestro archivo router aquí en nuestra plantilla mediante el uso de los objetos de ruta dólar, que también podríamos usar las opciones API. Así que vamos a escupir este ID de parámetro de ruta en la página y ver si eso está funcionando. Por lo que queremos abrir nuestro nuevo componente de edición de notas de vista. Así que las vistas de origen, ver editar notas. Y cambiemos este rubro para editar notas con un ID de llaves dobles rizadas normales. Accede a la información de nuestra ruta. Podemos agregar ruta dólar y luego para acceder a nuestros parámetros de rutas, podemos hacer puntos params y luego acceder al parámetro ID el cual configuramos aquí, solo podemos hacer dot ID. Entonces ojalá esto esté escupiendo en el ID de la nota en la página. Ahora, vamos a salvar eso. Recargar. Y sin embargo, si estamos en la ruta edit nope slash id2, vemos id2 en la página. Si hacemos clic en el primer botón editar, déjame ir a la ruta editar notas slash ID uno. Ahora vemos ID1 en la página. 85. Componente reutilizable: AddEditNote de la nota: De acuerdo, lo que realmente vamos a necesitar en esta nueva vista de nota de edición que hemos creado para editar una nota y guardarla. Bueno, básicamente lo que necesitamos es un área de texto en la que podamos cargar la nota y permitir que el usuario la edite. Y necesitamos un botón de guardar para que el usuario pueda guardarlo. Entonces básicamente lo que necesitamos es si retrocedemos exactamente lo que tenemos en la parte superior de nuestras notas ver aquí, solo necesitamos un área de texto y un botón. Ahora sólo podíamos saltar a nuestra vista de notas. En las vistas de origen, ver notas. Podríamos simplemente copiar este elemento de la tarjeta y todos los campos dentro de él. Pegue eso en la vista, edite la vista de punto de nota y, a continuación, vuelva a utilizarla. Bueno entonces estaríamos duplicando código. Siempre queremos evitar duplicar código tanto como sea posible. Por lo que tiene más sentido crear un componente reutilizable a partir de esta tarjeta, el área de texto y la manteca que podemos usar en cualquier lugar dentro de nuestra app. Saltemos a nuestro explorador en nuestra carpeta de notas. Vamos a crear un nuevo archivo llamado Editar vista de punto de nota. Porque vamos a poder tanto agregar como editar una nota usando este componente. Agreguemos nuestras etiquetas de plantilla. Ahora vamos a saltar a ver notas dot Vue copiará esta maqueta, este div con una clase de tarjeta. Todas las cosas dentro de ella copiarán eso, pegarlo en nuestra plantilla aquí en nuestro nuevo componente. Vamos a quitar todas las cosas dinámicas que se romperán aquí. Así que eliminemos este modelo V del área de texto y eliminemos este manejador de clics en el prop deshabilitado de las balas golpeadas. Ahorra eso. Ahora queremos poder controlar los botones que se muestran aquí. Porque en nuestra página de notas queremos que esto salga, nuevos cuadernos adentro, pero en la página de edición entonces probablemente queremos un botón que diga Guardar o Guardar nota o algo así. También podríamos querer poder agregar más de un botón también. Entonces vamos a crear aquí una ranura donde podamos insertar el botón de edición que deseemos. Sólo voy a por ableton. En cambio agregaremos una ranura, haremos de este un slots con nombre. Así que mucho nombre, atributo y establece eso en botones. Ahorra eso. Ahora usemos este nuevo componente en nuestra vista de notas y hagamos que todo funcione allí antes de que luego lo utilicemos en nuestra nueva página de edición. Vamos a saltar a ver notas vista de punto. Voy a importar este componente que acabamos de crear. Eso después de nuestras notas. Duplicaré esta línea. Y cuando vayas a importar, añadir, editar nota de componentes de slash slash notas slash add, edit notes, dot Vue. Ahorra eso. Ahora vamos a desplazarse hacia arriba. Voy a comentar todo este elemento de tarjeta. Entonces las salidas son nuevo componente. Editar, anotar, guardar eso. Vemos el área de texto, pero no vemos el botón. Tenemos que pasar el botón a nuestra ranura. Dentro de este componente Añadir Editar nota, podemos agregar una etiqueta de plantilla. Podemos agregar ranuras v dash, botones de dos puntos, que es el nombre de la ranura que configuramos en Agregar Editar nota punto vista aquí. Podemos mostrar esto solo haciendo botones hash y ahora podemos colocar objetos aquí. Entonces agarremos eso de la una maqueta que comentamos. Entonces el botón está aquí. Voy a copiar eso. Pega aquí. Ahorra eso. Todo se ve correctamente ahora. Pero no funciona porque esta área de texto, que ahora viene de nuestro nuevo componente reutilizable ya no es esta nueva nota ref en nuestra sección de scripts. Vamos a arreglar eso a continuación. 86. Hook con modelValue: Esta área de texto en el botón en ya no funciona. Y eso es porque esta área de texto, que está en nuestro nuevo componente hijo en edit note dot Vue ya no está enganchado a esta nueva nota ref que configuramos en este componente de notas de vista. Bueno, lo que podemos hacer es pasar esta nueva nota ref hacia abajo a Editar nota componente niño usando el modelo V. Entonces podemos engancharlo todo usando el valor modal y actualizar el valor modal. Así que primero vamos a establecer el modelo V, este componente Add Edit note a nueva nota, que originalmente estaba enlazado al área de texto. Podemos agregar una directiva modelo V y ponerla en notas nuevas y guardarla. Y ahora podemos recibir el valor de este modelo V en nuestro componente de edición de nota usando el prop de valor modal especial, y luego combinamos el prop a esta área de texto. ¿ Recuerdas cómo hacemos eso? Siéntase libre de pausar el video y darle una oportunidad. Lo que tenemos que hacer es agregar nuestras etiquetas de configuración de script. Necesitamos recibir el valor de este modelo V utilizando el valor del modelo prop. Por lo que necesitamos configurar nuestros apoyos. Hacemos eso agregando una constante llamada props set que igual al método define props. Y podemos pasar nuestras indicaciones aquí. Queremos recibir el tipo de prop valor del modelo va a ser cadena. Esto va a ser requerido. Por lo que vamos a establecer requerido a verdadero. Ahorra eso. Y ahora podemos vincular este prop de valor modal al área de texto. Podríamos hacerlo simplemente estableciendo el modelo V al volumen del modelo. Yo lo guardaré. Comprobar esto está funcionando. Vamos a saltar a anotar esa vista voy a cambiar el valor por defecto de esta nueva nota ref que está aquí. Entonces voy a meter algún texto ahí, salvo eso. Podemos decir que el texto está llegando al área de texto en nuestro nuevo componente reutilizable. No obstante, si hacemos salir estas nuevas notas en bruto en algún lugar de nuestra página. Entonces digamos que teníamos una etiqueta pre después de este componente add edit nope. Y acabamos de dar salida a una nueva nota. Ahorra eso, recarga. Y luego hacemos un cambio al área de texto. Podemos decir que el valor de esta nueva nota ref no se está actualizando. Y entonces lo que necesitamos para hacerlo en el nuevo componente hijo fuera editar la vista de punto de nota es explícitamente dejar saber al componente padre si nota stop view cuando el valor en el área de texto ha cambiado para que pueda actualizar el valor. Esta nueva nota href. Podemos hacer eso usando el valor del modelo de actualización. Así que vamos a saltar a agregar editar la vista de punto de nota. ¿ Recuerdas cómo hacemos eso? Nuevamente, siéntete libre de hacer una pausa e intentar hacerlo tú mismo. Pero lo que tenemos que hacer en esta configuración, nuestros manoplos crean una constante llamada emit, configurarla igual al método define emite. Y podemos pasar en nuestros eventos imitables a esta matriz de emite definida. Y queremos sumar los eventos actualiza valor del modelo de colon. Se trata de un evento especial que nos permitirá modificar directamente un valor que viene del componente padre por modelo V sin tener que emitir ningún evento del componente hijo y escuchar esos eventos y luego hacer el cambio. Por lo que actualizar el valor modal nos permite modificar esta nueva nota, href, que está en un su componente padre. Así que vamos a saltar de nuevo a ella. No vista de punto. Y lo que podemos hacer aquí es escuchar el evento inputs en esta área de texto, que se activará cada vez que hagamos un cambio a esta área de texto. Por lo que sólo podemos sumar insumos. Lo que queremos hacer es emitir. Con dólar emiten. Queremos emitir el evento de valor del modelo de colon de actualización. Y tenemos que pasar el valor que queremos establecer que, para, establecer el valor que se está pasando con el modelo V en el componente padre como segundo parámetro. Y así podemos simplemente establecer eso para modelar volumen. Ahorra eso. Veamos si eso está funcionando. Recarga esta página, cambie el valor del área de texto. Sí, podemos ver esta pre-charla sobre la vista notas dot componente Vue se está actualizando. Por lo que sabemos que esta nueva nota aproximada en el componente padre está siendo actualizada con éxito por el componente hijo en editar la vista de punto de nota escuchando el evento de entrada en el texto área y luego emitiendo el valor del modelo de actualización de pasar en el último valor, que luego actualizará directamente el valor del modelo V nuevas notas, que estamos pasando aquí. Antes de seguir adelante, eliminemos esta precharla que agregamos sobre todo este código que comentamos. Deshazte de eso. También necesitamos establecer el valor predeterminado de la nueva nota de nuevo a una cadena vacía. Ahorra eso, recarga. Vamos a asegurarnos de que todo esté funcionando. Por lo que puse una nueva nota, haga clic en el botón, y se agregó la nueva nota. No obstante, vemos un error en nuestra consola no puede leer propiedades de enfoque de lectura nulo. Y eso es porque en esta línea aquí, después de agregar una nueva notas enviando la nota constante a nuestra app note action en nuestra tienda, estamos tratando de enfocar un elemento que tenga una plantilla href de nueva nota ref. Este href ya no existe en este componente. Esta plantilla Req ahora está abajo en el componente hijo en editar la vista de punto de nota aquí. Por eso esta área de texto no se enfoca después de agregar una nueva nota, y por eso estamos viendo este error. Vamos a arreglar eso a continuación. 87. Arrestar el enfoque: Cuando escribimos una nota nueva, haga clic en el botón Agregar nueva nota. Podemos ver las notas se suma a nuestro listado y añadirlo a nuestra tienda de opiniones a las notas tienen razón en el estado. No obstante, el área de texto no se reenfoca y vemos este error en la consola no puede leer propiedades de ningún enfoque de lectura a menos que porque en las notas de vista vista punto después agregamos las notas a las notas están justo en la tienda. Estamos utilizando esta plantilla ref, nueva nota ref para agarrar el elemento área de texto y luego enfocarlo. Pues bien, esta plantilla ref, nueva nota href ya no existe en este componente de notas de vista. Entonces vamos a quitar esta constante aquí, que configuramos para la plantilla ref. Y también quitamos esta línea donde estábamos enfocando el área de texto y encontramos otra forma de hacerlo. Una cosa que podríamos hacer en su lugar es agregar una plantilla ref al componente Agregar Editar nota que estamos mostrando aquí. Y usa esa ref de plantilla para obtener acceso al componente secundario impar notas de edición, y luego disparar un método que se configura dentro del componente Add Edit No.2. Agreguemos un ref a este componente. Y lo llamaremos add, edit, note, ref, guardaremos eso y saltaremos abajo al fondo. Tenemos que liquidar un dato, registrar esto también con el mismo nombre. Por lo que vamos a crear una constante llamada Editar nota HREF, establecer eso igual a una ref de datos con un valor inicial de null. Ahora en nuestro método de nota aquí, después de borrar la nueva nota ref, los que borran el área de texto, podemos entonces acceder al componente hijo en editar nota mediante el uso de esta plantilla href, podemos hacer editar nota valor de punto ref para acceder a ese componente. Y entonces podemos desencadenar un método que está en ese componente. Entonces digamos que queremos activar un método llamado área de texto Focus. Podemos hacer esto así. Ahora aún no hemos configurado este método de área de texto de enfoque. Así que guardemos eso y saltemos para agregar editar la vista de punto de nota, configuramos este método. Empecemos aquí una nueva sección con un comentario que dice que área de texto de enfoque creará este método. Entonces const, el área de texto de enfoque es igual a una función de flecha. Por ahora, solo cerraré la sesión del área de texto de enfoque. Ahorra eso. Veamos si este método en el área de texto de enfoque de componente secundario se está activando con éxito por su componente padre vista notas vista punto aquí. Vamos a recargar. Este método debe ser disparado después de agregar una nueva nota. Entonces vamos a escribir algunos textos. Haga clic en el botón. Eso no funcionó y vemos este error. Agregar, editar nota ref valor de punto, área de texto enfocada en puntos no es una función. No es capaz de encontrar esta función que acabamos de configurar en el componente hijo. Y eso es porque cuando estamos usando el patrón de configuración de script, necesitamos realmente exponer cualquier método que queremos que estén disponibles para un componente principal de componentes. Hacemos esto mediante el uso del método define exponer y pasamos a eso un objeto. Solo queremos agregar aquí cualquier método que quisiéramos que se pusiera a disposición de este componente padre componentes, queremos hacer que el método de área de texto de enfoque esté disponible para que solo podamos agregar área de texto de enfoque aquí. Así que ahorremos eso y veamos si eso está funcionando. Escribiendo una nota, pulsa el botón. Sin embargo eso está funcionando ahora podemos ver el área de texto de enfoque está bloqueado. Entonces nuestro componente padre, ¿nota que la vista de puntos está activando con éxito este método de área de texto de enfoque en su componente hijo para editar la vista de punto de nota. Por lo que ahora todo lo que tenemos que hacer para enfocar esta área de texto es agregar otra plantilla ref a esta área de texto y luego usar eso para enfocarlo aquí, enfocar esta área de texto es agregar otra plantilla ref a esta área de texto y luego usar eso para enfocarlo aquí,desplácese hasta el elemento área de texto. En esta área de texto todavía tiene un techo en él desde antes de esta nueva nota ref bien, esta área de texto ya no es sólo para notas nuevas. También va a ser útil editar notas. Vamos a cambiar el nombre de esto a área de texto href, que es un poco más genérico, y usaremos este href para enfocar el área de texto. Saltemos a nuestro método de área de texto de enfoque. También necesitamos configurar un ref de datos para esta plantilla en bruto con el mismo nombre. Por lo que queremos hacer const área de texto HREF, establecer que igual a un bruto con un valor inicial de null. Vamos a comprobar si estamos importando el método ref desde la vista y no lo estamos. Apenas agreguemos una sección de entrada en la parte superior. Voy a importar desde la vista, saltar de nuevo a nuestro método. Ahora para obtener acceso al elemento área de texto, sólo podemos hacer el área de texto ref valor de punto. Y luego para enfocarlo, solo podemos disparar el método de enfoque. Entonces enfoca, di que y ojalá esto debería estar funcionando ahora, escribe y notas, pulsa el botón encendido. Sí, ha funcionado. Hemos agregado la nueva nota. Lo podemos ver en la página y también hemos despejado el área de texto, desenfocarla también. 88. Color personalizado, marcadores de sitio y accesorios de etiqueta: Agreguemos nuevo componente reutilizable en edit nope dot view a nuestra nueva página de edición de notas. Voy a saltar a ver notas donde actualmente estamos utilizando el componente Agregar Editar nota. Y sólo voy a copiar este cierre que saltó a la nueva vista, ver editar nope dot view. Y vamos a pegar eso dentro de este div. Y simplemente eliminemos todo el contenido dinámico por ahora. Así que eliminaré el modelo V, eliminaré el controlador de clics o el atributo disabled, guarde eso. Ahora necesitamos importar este componente antes de poder usarlo. Agreguemos nuestras etiquetas de configuración de script. Agrega nuestra sección de entradas, e ingresaremos edit, note from slash components, slash notes slash add, edit, note, dot Vue, guarde eso. Ahora podemos ver ese componente en la página. Estoy viendo una advertencia en la consola aquí. Me falta valor de modelo de prop requerido. Y eso se debe a que este componente para editar la vista de punto de nota está esperando el prop de valor modal o el prop del modelo V, y esto se establece en un prop requerido. Vamos a configurar un áspero en Q edit note dot view que podemos enlazar a este componente de nota de edición en nuestra sección de scripts, un montón de nuevo comentario que dice Nota. Configuraremos un ref llamado contenido de nota. Establezca eso igual a un href con un valor inicial de una cadena vacía, porque estamos utilizando el método ref, necesitamos importar esto. Entonces vamos a importar ref desde la vista. Y ahora podemos vincular esta balsa a nuestro componente Agregar Editar nota. Ahora podemos sumar V-modelo. Recuerda que todo lo que tenemos que hacer es agregar el modelo V porque ya hemos configurado este componente de nota de edición de anuncios para extraer automáticamente cualquier modelo V que pasemos a este componente usando el valor modal prop, y actualizar automáticamente el modelo V, que está en el par de componentes mediante el uso de los eventos de valor del modelo de actualización. Por lo que todo lo que tenemos que hacer ahora para ojalá jabón es sólo vincular este concepto de nota ref a este componente. Por lo que vamos a configurar este modelo V para anotar contenido y guardar eso. Y vamos a asegurarnos de que eso esté enganchado. Pondré algo de texto aquí. Podemos ver la actualización sobre el área de texto. Vamos a ajustar eso de nuevo a una cadena vacía y guardarla. Vamos a cambiar el texto de este botón aquí va a cambiar este texto para decir nota, salvo eso. Ahora me gustaría que esta tarjeta que rodea nuestra área de texto en botón tenga un color diferente cuando estamos en la página de edición. Por lo que se ve un poco diferente al área de texto de la tarjeta y botón que se encuentra en la página de notas. Si abrimos nuestro componente reutilizable a cabo editar nota punto vista, podemos ver esta clase en la tarjeta tiene éxito de fondo. Podemos cambiar esta palabra éxito para crear diferentes colores. Por ejemplo, podemos cambiar esto para que tenga enlace de fondo oscuro para darle este color azul, vamos a configurar un prop en este Agregar Editar nota dot view componentes para que podamos cambiar dinámicamente esta palabra aquí, los que cambian el color. Volveré esto al éxito por ahora y lo guardaré. Ahora vamos a saltar a nuestros apoyos y vamos a configurar un nuevo prop llamado color BG. Estableceremos el tipo a string. Voy a conseguir esto un valor predeterminado también. Para que si no proporcionamos este prop en un componente padre, todavía podemos tener un color de fondo en esta tarjeta establecerá el valor predeterminado para el éxito. Yo lo guardaré. Y ahora vamos a saltar a este div con la clase de tarjeta. Voy a dividir los atributos en eso y voy a cortar esta casa fondo éxito, vidrio oscuro. Voy a enlazar al atributo de clase. Voy a usar una cadena de plantilla aquí usando backticks para que podamos sacar el concepto de este prop o pegar en esa clase que copiamos tiene éxito de fondo, oscuro. Vamos a deshacernos de la palabra éxito y nuestros tirantes rizados de dólar y salida de nuestra prop en lugar de color BG. Podemos o bien hacer puntales dot color BG, o simplemente podemos hacer color VG. Guardaré esa recarga. Y podemos ver que si no proporcionamos este prop de color BG a este Agregar Editar ningún componente cuando lo usamos en un par de componente, entonces vemos el color de fondo predeterminado porque es va a usar este valor predeterminado en el prop que establecemos aquí. Pero deberíamos poder anular esta palabra éxito proporcionando este prop al componente Agregar edición de nota cuando lo usamos en un componente padre. Así que vamos a saltar a ver editar la vista de punto de nota. Soy mucho este prop a nuestra Agregar Editar. Ningún componente aquí establecerá el color BG, y lo configuraremos para enlazar, guarde eso. Y ahora vemos este 11 azul. Y si lo inspeccionamos, podemos ver que la tarjeta, cómo está esta clase tiene enlace de antecedentes doc. Pero si vamos a la página de notas e inspeccionamos esa tarjeta, podemos ver que la clase tiene éxito de fondo, oscuro, el color de fondo está funcionando. Ahora, también hagamos que guardemos notas, pero también está en el mismo tipo de color. El cuaderno guardado y él está aquí. Así que vamos a cambiar esa clase también, tiene enlace de fondo en lugar de éxito. Ahorra eso. Y ahora tenemos un botón azul mientras estamos en ello. Desactivemos este botón cuando este campo esté vacío. Nuevamente sin el atributo disabled condicionalmente solo cuando no hay contenido vacío. Por lo que vamos a establecer esto para no anotar contenido. Ahorra eso. Ese botón está deshabilitado por defecto, pero si escribimos algo y se vuelve a activar, ahora también necesitamos hacer que este texto marcador de posición en el área de texto sea personalizable también porque el texto agregar una nueva nota no tiene sentido en esta página. Porque esta área de texto va a ser para editar una nota o no agregar una nueva nota. Vamos a agregar otro prop, agregar editar la vista de punto de nota para este texto de marcador de posición, que actualmente está apenas codificado en el área de texto, configurará un nuevo prop llamado marcador de posición. Acomódese con un tipo de cadena. daremos a esto un valor predeterminado de digamos tipo algo, punto, punto, punto, guarde eso. Ahora vamos a usar este prop en nuestra área de texto. Simplemente podemos enlazar al atributo marcador y luego generar este prop, ya sea con puntales punto marcador de posición o simplemente marcador de posición. Guardaré esa recarga. Ahora podemos ver el valor predeterminado de los tipos de cosa en el placeholder, pero ahora deberíamos poder anular esto pasando en este puntal de placeholder a nuestro componente de nota de edición de arte cuando lo usamos en una de nuestras páginas, vamos a saltar a ver, editar nope, vista de punto. Y agregaremos este prop de placeholder, placeholder. Podríamos establecer esto para editar, anotar, guardar eso, y decimos eso en el área de texto. Ahora si saltamos de nuevo a nuestra página de notas sigue diciendo tipo algunas cosas. Vamos a anular eso también. Por lo que abriremos View notes dot Vue tendrá este marcador de posición aquí también a nuestro componente de nota de edición de arte. Entonces marcador de posición, casi al menos para agregar una nueva nota, guarde eso y vemos esa actualización. También me gustaría poder mostrar una etiqueta en la parte superior de nuestra área de texto para que la función de esta área de texto sea un poco más clara. Primero, acabemos de configurar el marcado para esto. Así que saltaré a añadir edit app.vue. Y en la parte superior de nuestro elemento de tarjeta por encima de este campo, voy a añadir una etiqueta con una clase de etiqueta. Por ahora, eliminaré esto para atributo. Apenas pondré el texto a textos etiquetados por ahora. Ahorra eso. Hagamos esto blanco. Entonces mucha clase de textos blancos para que sea blanco. Y de nuevo, estas clases son sólo de Bohmer y quiero que esta etiqueta sea opcional. Así que conformemos un, otro apoyo para esto. Vamos a configurar un prop llamado inicio de la etiqueta no a un tipo de cadena. Y salva eso. Y solo quiero mostrar este elemento de etiqueta en la página si se ha proporcionado este prop. Entonces voy a dividir los atributos en esto, o podemos simplemente agregar una directiva v-if, y solo queremos mostrar esto si se ha proporcionado el prop de etiqueta, ya sea puede hacer v si solicita punto etiquetada o simplemente etiqueta vf. Entonces lo guardaré y vemos que la etiqueta desaparece ya que en realidad no estamos proporcionando este prop etiquetado a este Agregar Editar ningún componente cuando lo usamos en nuestra página de edición aquí, si agregamos esto etiquetado prop aquí, ¿etiqueta? Podríamos configurar esto para editar notas, guardar eso, y volver a cargar. Ya podemos volver a ver la etiqueta, ya que estamos brindando este prop, aunque no está mostrando el valor que estamos pasando aquí, vamos a saltar de nuevo a Agregar Editar nota punto vista, y podemos acaba de emitir el contenido de este prop aquí. Podemos simplemente reemplazar textos etiquetados con llaves dobles rizadas y etiquetadas salvo eso. Y ahora vemos editar notas. Y si saltamos de nuevo a la vista de notas y no vemos esa etiqueta, ya que no estamos proporcionando ese prop etiquetado en la página de notas de vista aquí. El motivo por el que creo que necesitamos un etiquetado aquí es porque cuando el usuario hace clic en editar notas, no van a ver aquí un área de texto vacía. Van a ver esta área de texto poblada con la nota. Y así no verán ese placeholder. Por lo que esto solo le dará al usuario un poco más de aclaración antes de seguir adelante y empezar agregar y se llega a nuestra tienda de opinión por conseguir el contenido de la nota que el usuario es tratando de editar. Añadir una acción para actualizar la nota. Apenas agreguemos aquí un botón de cancelar, que nos lleva de vuelta a la página de notas. Ya que en este momento no hay forma de que el usuario vuelva a un lado de hacer clic en la pizarra. Entonces, lo que quieres ver editar la vista de punto de nota en el interior de nuestra ranura de botones aquí, solo agregaremos otro botón. Entonces duplicaré esta nota guardada. Quitar a los discapacitados, prop cambió el texto a abogado. Ahorra eso. Voy a cambiar esta clase tiene fondo vinculado a es dash le gusta darle este color gris claro. Ahora hay un par de formas en que podríamos enviar al usuario vuelta a la página de notas cuando haga click en esto, una cosa que podríamos hacer es convertir este botón en un componente de link router, establecer los dos prop en slash, guardar eso y ver si eso funciona. Eso funciona. Lo otro que podríamos hacer es dejar esto como un botón y agregar un manejador de clics a este click. Y podríamos usar el método del router dólar, porque todavía podemos usar el método del router dólar en nuestras plantillas usando la API de composición. Por lo que ya sea podemos hacer un router de dólar dot, push, forward slash, save, eso funciona. Sí, eso funciona. O si nuestra app era más complicada y tuviera muchas formas diferentes en que pudiéramos llegar a esta página de edición desde diferentes páginas a las que podríamos querer simplemente enviar al usuario directamente de vuelta a de donde venían. Entonces para hacer eso, podríamos simplemente hacer paréntesis de punto de enrutador dólar, guardar esa recarga. Eso funciona también. 89. Getter : consigue contenido de nota (useRoute): Cuando el usuario hace clic en este botón de edición que se lleva a esta nueva página de edición de notas. Y van a esperar el texto de la nota que acaban de hacer clic en este texto aquí se cargue en esta área de texto. Y podemos hacer esto usando un getter en nuestra tienda de opiniones. Lo que vamos a necesitar hacer, agarrar el ID de la nota actual de nuestros parámetros de ruta, que podemos ver en nuestra barra de direcciones aquí, ID uno, y luego enviar el ID a un getter en nuestra tienda, que luego recuperar la nota correcta de mis notas están justo en nuestra tienda basado en el ID. Devolverlo a esta vista editar componente de nota, donde entonces podemos asignarlo a este contenido de notas href, que está enlazado al área de texto, las que poblan el área de texto con los textos de la nota correcta. Para empezar, vamos a simplemente configurar un getter realmente simple, que acaba de obtener el contenido de la primera nota en nuestra matriz. Saltemos a nuestra tienda de archivos de tienda Node.js. En la carpeta de tiendas. Nos desplazaremos hacia abajo para sumar algunas conjeturas. Sólo tenemos que añadir un getters objetos. Después del objeto de esta acción. Podemos colocar a todos nuestros captadores aquí. Se sale. Acabamos de empezar una propiedad con el nombre del gueto w1, o podríamos llamarlo obtener nota de contenido. Y luego asignamos esta propiedad a un método como este para que esto llegue, pueda obtener acceso al estado estadounidense, necesitamos pasar el estado a este gueto así. Los getters siempre necesitan devolver algo al igual que las propiedades computadas. Así que por ahora solo devolvamos el contenido de la primera nota en la matriz de notas en nuestro estado. Por lo que podemos agarrar esto de las notas de puntos estatales y luego corchetes 0 para agarrar el contenido de punto de la primera nota, vamos a conseguir el contenido de ese primer nodo. En nuestras tripas. Todo lo que tenemos que hacer es devolver notas de puntos de estado, corchetes 0 para agarrar el primero, dot contenido y guardar eso. Ahora deberíamos poder usar este getter en cualquier parte de nuestra app. Así que vamos a usarlo en Ver, Editar vista de punto de nota. Necesitamos importar nuestra tienda. Por lo que tenemos que hacer importar notas de tienda de Estados Unidos desde tiendas de slash slash notas de tienda. Que necesitamos asignar estas dos constantes para que podamos acceder a ella. Mucho nuevo comentario que dice tienda. Configuraré una constante llamada notas de tienda. Establezca eso igual a usar notas de tienda paréntesis. Y en realidad vamos a mover esto un poco. Voy a cortar eso, pegarlo después de nuestras importaciones. Ahora podemos utilizar el getter en nuestra tienda para agarrar ese concepto desde la primera nota y asignarlo a esta nota contenido ref, que mostró que actualizar el área de texto. Para acceder a nuestro gueto. Podemos simplemente hacer almacenar notas dot y luego el nombre de nuestro getter es obtener contenido de nota. Solo queremos asignar esto a esta nota contenido ref, por lo que sólo podemos hacer nota de contenido valor de punto igual a ese. Así que ahorremos eso ahora, recargue y eso no parece estar funcionando. Echemos un vistazo en nuestra consola, no viendo ningún error. Echemos un vistazo a nuestro archivo de tienda. Solo asegúrate de que la aplicación se esté ejecutando. Es ejecutarlo de ayuda si realmente estuviéramos en la página de edición. Así que vamos a hacer clic en un botón Editar. Podemos ver los textos de la primera nota se está cargando en esta área de texto. obstante, no solo queremos agarrar el texto de la primera matriz de notas. Tenemos que poder agarrar el contenido de las notas base en el ID de la nota en la que acaban de hacer clic. Si hacemos click en Editar en el segundo nodo, entonces esperamos ver este contenido de notas que se está cargando aquí. Podemos agarrar el ID que se está pasando a esta página usando nuestros parámetros de ruta que vimos anteriormente en que podemos dividir esto en nuestra plantilla usando el objeto de ruta dólar. Después de esto, agrega notas de edición, solo agregaré una etiqueta pre, dobles llaves rizadas y luego params de punto de ruta de dólar. Y luego el nombre de nuestro parámetro ID. Tenemos que pasar este ID a nuestro captador para que eso llegue, pueda obtener el contenido para la nota correcta. No obstante, tenemos que hacer esto en nuestra sección de guiones. Y podemos acceder a nuestra información de ruta en la sección de guiones utilizando los objetos de rutas de dólar. Cuando estamos utilizando la API de composición, necesitamos usar rutas Vue como nuevas rutas de Estados Unidos componibles. Así que vamos a quitar esta pre-charla. Después de esta importación aquí vamos a importar ruta de Estados Unidos desde view dash router. Y luego un montón de comentarios aquí que acaba de decir router. Tenemos que asignar a este usuario fuera composable a constante o variable. Por lo que vamos a configurar una constante llamada rutas. Establezca eso igual a usar rutas paréntesis. Y ahora podemos acceder a la misma información de rutas que acabamos de dividir antes de usar esta constante de ruta. Veamos sólo si podemos cerrar la sesión este parámetro de ruta, este parámetro de ID f. ¿ configuramos este concepto de nota href. Simplemente cerraremos la sesión console.log, enrutaremos dot params dot ID, guardaremos eso. Y sin embargo podemos ver que id2 está siendo bloqueado. Y si volvemos a la página de notas, haré click en Editar en la primera nota y vemos que ID1 está bloqueado. ¿ Cómo podemos pasar el valor de este ID a getter? 90. Getter (con parámetros Parámetros): consigue contenido de nota: ¿ Cómo podemos pasar esta identificación a nuestro captador? Se podría pensar que sólo podríamos empezar paréntesis a r consigue un aquí y pasarlo así, rutas dot params dot ID, guardar eso, luego saltar a nuestro archivo de tienda, abajo a r, se levanta y tal vez más allá de esto en como segundo parámetro. Podemos ver que esto no funciona. Vemos un error en la consola. Robar notas no obtienen ningún contenido no es una función. Eso se debe a que este getter no es una función, es solo una propiedad objeto así asignada a una función. Lo que podemos conseguir alrededor de esto haciendo salir obtiene un retorno, una función con el parámetro por el que estamos pasando. Deshaznos de este parámetro ID y deshámonos de esta línea de retorno. Lo que podemos hacer es simplemente devolver una función de flecha como esta. Pasa el parámetro aquí. Entonces veamos si podemos bloquear esto ahora. Consola dot log lote de ID de cadena de puntos Geta y luego dividirá este parámetro ID. Entonces guardaré esa recarga. Podemos ver que es ID de trabajo de getter ID1. Vemos una advertencia aquí, pero no te preocupes por eso. Eso es solo porque getter está devolviendo una función en este momento o no una cadena. Estamos asignando eso a esta nota contenido href, que se está pasando para agregar nota de edición en el modelo V, el prop de valor del modelo en este componente está esperando una cadena. Entonces veremos que esto desaparezca cuando lleguemos a trabajar aquí. Vamos a saltar de nuevo a la tienda Node.js. Y ahora podemos usar este ID para tomar la nota correcta en esta propiedad de contenido de la matriz de notas que está en nuestro estado. Por lo que podemos usar filtro para hacer esto. Dentro de este método aquí, vamos a devolver las notas están en lo correcto, así que señale notas de punto. Pero entonces lo vamos a filtrar con el método de filtro. Vamos a estirar esto un poco. Esto va a recorrer cada elemento de nuestra matriz. Vamos a necesitar un placeholder para cada elemento a medida que está pasando. Entonces usaremos nota para eso. Después añadimos otra flecha. La gente debe especificar nuestros criterios para las notas que queremos agarrar. Y queremos recortar las notas donde la propiedad ID sea igual a la propiedad ID que estamos pasando aquí desde nuestra página de edición de nota, queremos devolver notas donde el ID sea igual a ID. Dado que todos nuestros ID van a ser únicos, entonces esto devolverá una matriz que contiene solo denota objeto que estamos buscando. Dado que esto va a ser una matriz, necesitamos agarrar el primer y único elemento de la matriz agregando corchetes 0. Y luego de eso queremos dejar caer el concepto de propiedad para que solo podamos hacer el contenido de puntos. Salvemos eso y veamos si esto está funcionando. Recarga la página. No noté slash id uno. Y estamos viendo el concepto a partir de las notas con un ID de ID uno. Y si saltamos de nuevo a la página de notas, click en Editar en la segunda nota, entonces vemos el contenido de la segunda nota con id2 siendo cargado en el área de texto. 91. Acción : nota de actualización: Cuando el usuario realiza un cambio a esta nota y hacen click en Guardar, queremos actualizar la propiedad conceptual de la nota correcta en nuestro estado con el nuevo contenido en el que ha escrito. En primer lugar, solo activemos un método local. Cuando hacemos click en el botón Guardar, voy a saltar a ver editar nota dot Vue, voy a quitar esta consola iniciar sesión aquí. Saltemos a nuestros cuadernos guardados en celda animal. Ir a añadir un poco de margen entre estos botones está en realidad en el botón de consola permitido. Tres, digamos tal vez dos. Y se ve un poco mejor. Ahora agreguemos un manejador de clics a estos cuadernos guardados en. Así que haga clic en iguales activará un método llamado handle save clicked. Y vamos a crear ese método. Lote de nuevo comentario aquí que dice Guardar clicado, configura nuestro método handle save clicked sub igual a una función de flecha. Solo cierra la sesión. Manejar guardar, haga clic por ahora, guarde eso, haga clic en el botón. Podemos ver que eso está siendo bloqueado. Vamos a desencadenar una acción en nuestra tienda en este punto para actualizar las notas y notas están justo en el estado. ¿ Qué información va a necesitar esa acción para hacer eso? Bueno, va a necesitar el ID de la nota para que podamos averiguar qué notas en la matriz para actualizar realmente. Y también va a necesitar la nueva cadena de contenido también. Entonces hay un par de formas en que podríamos pasar esta información a una acción en nuestra tienda. Para que pudiéramos configurar un objeto. Podríamos llamarlo carga útil o algo así. Podríamos añadir un par de propiedades a este ID, que podemos volver a obtener de nuestras promesas de ruta. Así rutas dot params dot ID, y luego una propiedad conceptual que sólo podemos agarrar de esta nota contenido href, que está enlazado al área de texto. Así nota el valor de punto de contenido. Y luego podríamos simplemente pasar toda esta carga útil como un solo parámetro a una acción repleta de UX. Esta fue la única forma en que pudimos hacer esto porque las acciones en UX solo pueden aceptar un parámetro. No obstante, las elecciones en Kenia pueden realmente aceptar múltiples parámetros. Entonces la otra forma de hacerlo es solo enviar el ID en el contenido como dos parámetros separados. En este caso, creo que deberíamos hacerlo de esa manera porque hará que nuestra acción quede un poco más clara porque podremos decir exactamente lo que se está pasando aquí. Así que vamos a configurar esta opción va a crear una nueva acción llamada Fecha de libro. Nota, esto va a recibir un parámetro ID, el parámetro de contenido r. Vamos a bloquear estos hacia fuera. Voy a cerrar sesión ID. Entonces cerraremos la sesión del parámetro conceptual también. Ahorra eso. Ahora vamos a activar el oxígeno aquí y nuestra acción va a ser en robó notas, puntos, actualización, nota, porque este es el nombre que dimos nuestra acción aquí. Y esto va a esperar un parámetro ID en el parámetro concept. Entonces el ID que vamos a soltar de nuestros parámetros de ruta, las rutas detienen el ID de punto de Ram. Y entonces el concepto que sólo vamos a agarrar de esta nota contenido href, que está vinculado al área de texto. Para que podamos obtener eso del valor de punto de contenido de nota. Ahora vamos a guardar eso y ver si estos dos parámetros están llegando a través de esta acción. Recargar, cambiar el contenido, haga clic en Guardar. Y sin embargo podemos ver a los que están siendo bloqueados por nuestra acción. Se puede ver que el id está bloqueado en el contenido actualizado siendo bloqueado también. Ahora solo necesitamos actualizar las notas correctas en nuestro estado. Y una forma en que podríamos hacer eso es averiguar primero el índice o la posición de las notas en nuestra matriz utilizando el método find index. Y luego podemos simplemente actualizar las notas de nuestro derecho en esa posición y actualizar la propiedad de contenido. En primer lugar, solo agarremos el índice de las notas que queremos actualizar. Entonces configuraré una variable llamada index. Y luego vamos a disparar el método de índice bind en nuestras notas son correctas. Y podemos llegar a nuestra matriz de notas en este punto notas. Para que podamos hacer este punto apuntes, dot find, index. Y de nuevo, usaremos notas como nuestro placeholder ya que está haciendo un looping a través de nuestra matriz. Establezca eso igual a una función de flecha. Y queremos devolver el índice de la nota donde el ID de la nota sea igual a esta idea de que estamos pasando a esta acción igual a Id. Y en realidad creo que sólo podemos dispararle esto quitando estos tirantes rizados y la palabra volver. Veamos sólo si eso funciona. Además, voy a hacer lo mismo a este filtro de aquí abajo, puedo mostrar esto quitando los paréntesis, volver en estos paréntesis de cierre, ya que sólo estamos disparando una línea aquí. Así que vamos a cerrar la sesión de este índice y ver si eso está funcionando. Índice. Guarda eso, recarga la página y cámbiala y haz clic en Guardar. Podemos ver que el índice es, se establece a uno aquí, lo cual es correcto porque esa es nuestra segunda nota. Si saltamos de nuevo a la primera nota, haga un cambio y haga clic en Guardar. Déjame ver el índice 0 que se cierra la sesión. De acuerdo, entonces ahora que tenemos el índice de las notas que queremos actualizar y nuestra matriz de notas, ahora podemos actualizar la nota. Así que desplácese hacia abajo a nuestra acción de actualización. Voy a deshacerme de estos console.logs, notas de acceso, array. Podemos simplemente hacer estas notas de punto. Y luego para acceder a las notas en la posición de índice, sólo podemos hacer corchetes índice. Entonces queremos acceder al concepto de propiedad y configurarlo a este contenido que estamos pasando a esta acción. Entonces establece eso igual al contenido y quita este registro de consola. Veamos si eso está funcionando. Entonces voy a recargar, hacer un cambio nuevo concepto. Haga clic en Guardar. Ahora si hacemos clic en cancelar, podemos ver que la primera nota se ha actualizado con el nuevo contenido. Vamos a asegurarnos de que funcione también en la segunda nota, haga clic en editar algún contenido nuevo, haga clic en Guardar, haga clic en cancelar. Este nodo también ha sido actualizado. No obstante, cuando el usuario hace clic en Guardar en este botón, no queremos dejarlos en esta página. Realmente queremos redirigirlos de nuevo a la página de notas. Hagámoslo a continuación. Pero antes de seguir adelante, acabo de darme cuenta que aquí hay otra declaración de retorno que podemos taquigrafía. Voy a quitar este corsé rizado en nuestra acción de borrar nota al regreso. Y no me quito el corsé rizado de cierre también. Echemos un vistazo a la nota impar. Ese está bien tal como está. Vamos a salvar eso. 92. useRouter : Redirigir a la página de notas: Vamos a redirigir al usuario de nuevo a la vista de notas. Después de esta nota se ha guardado. Vamos a saltar a ver editar la vista de punto de nota. Tenemos que hacer esto en nuestra sección de guiones. Después de esta línea. En la API de Opciones, podríamos simplemente hacer este router dot dollar. Entonces no los empujes y los empujes a la raya del camino. Mientras que en la API de composición, esto no va a funcionar. Así que vamos a deshacernos de eso. Y necesitamos importar el router composable estadounidense desde Vue Router. Vamos a saltar hasta la cima aquí donde estamos importando ruta de uso. Podemos simplemente empezar a usar router que necesitamos asignarle a esto una constante antes de poder usarlo. Para que podamos hacer eso después de que hayamos instalado, usaré la constante de ruta. Podemos simplemente hacer un const, usar. Const rutas iguala uso router. Ahora podemos acceder a toda la ruta habitual. Entonces métodos como Porsche y reemplazan de nuevo usando esta constante. Así que ahora abajo para manejar guardado método clicked. Después de actualizar la nota, solo podemos hacer router dot push, los empujaremos de nuevo a la página de notas, que está en la ruta de la slash. Salvemos eso y veamos si eso está funcionando. Recargar la página, cambiado, el contenido, puede ahorrar en sin embargo estamos de vuelta en la lista de notas. Podemos decir que se ha actualizado un nodo. 93. Más página página de Getters y estadísticas: Para demostrar aún más que nuestra tienda de opiniones, tienda Node.js se puede utilizar en cualquier lugar dentro de nuestra app. Vamos a crear una nueva página, una página de Estadísticas, que en realidad ya hemos configurado una página en una ruta para eso. En esta página, vamos a mostrar una tabla en la que se muestra cierta información sobre nuestras notas. Vamos a mostrar el número total de nodos que tenemos y también el número total de caracteres de todas nuestras notas combinadas. Pero antes de configurar esta página de Estadísticas, he notado que este menú móvil no está desapareciendo cuando hacemos clic para ir a una nueva página. Vamos a arreglar rápidamente primero Barra suficiente es un diseño de componentes fuente y Navbar? Desplazemos hacia abajo hasta la sección de guiones. Este show mobile suficiente ref es lo que está determinando si se muestra o no el menú móvil. Si cambio esto a true, podemos decir que el menú móvil se muestra por defecto. Volveré a poner eso a falso. Y así lo que podríamos hacer es solo asegurarnos de que volvamos a configurar esto a false cada vez que se haga clic en uno de nuestros enlaces en el menú móvil. Así que saltemos a los enlaces del router A2 aquí, notas, y estadísticas. Y sólo podemos agregar un manejador de clics a ambos. Voy a hacer una selección múltiple aquí. Pon mi cursor aquí al lado de la palabra rutas enlace. Mantenga pulsada la tecla Alt y luego coloque otro cursor al lado de esta etiqueta de apertura de enlace de enrutador, presione Enter. Se me permite hacer click handler y sólo vamos a volver a configurar este show mobile nav a false. Por lo que sólo podemos hacer mostrar móvil ahora es igual a false, guardar esa recarga y ojalá este menú móvil desaparezca cuando cambiemos de páginas, y lo hace. Así que utilicemos el componente de tabla de Ballmer para mostrar algunos datos sobre nuestras notas. Acabo de configurar el marcado para eso primero, cerraré estos módulos de archivos para preguntar puntos, vistas de página, vista, estadísticas, vista de puntos. Para agregar una mesa con algunos estilos bonitos, solo necesitamos agregar una mesa normal con una clase de mesa. Vamos a crear una tabla con una clase de tabla dentro de eso sin elemento de cabeza T en nuestro elemento cuerpo. Y luego en nuestro elemento cabeza T sin fila. Entonces TR, fila de mesa. Estoy dentro de eso. Agregaremos un par de celdas Th, celdas de encabezado de tabla. En el primero, acabo de poner el rubro parado, duplicar eso. Y luego en el encabezado de la segunda tabla, solo voy a tirar de valor, guardar eso. Y ahora podemos ver nuestra fila de cabecera de mesa que. Entonces en nuestro cuerpo agregaremos una fila de tabla en el interior que agregará un par de celdas de datos de tabla TDS. En el primero queremos poner el nombre de nuestras estadísticas. Entonces voy a poner número de notas. Y luego en la segunda celda vamos a mostrar el número real de notas, pero por ahora solo pondremos XXX y duplicaré esta fila de tabla y luego seguiré el nombre. Pondré número de caracteres, paréntesis de todas las notas. Decir que para hacer de esta tabla de ancho completo, sólo podemos agregar una clase a la tabla de está discontinuado ancho de guión completo. Esta es sólo otra clase anterior, digamos, pero en realidad creo que el ancho completo es una palabra. Así que vamos a deshacernos de ese guión, salvo eso. Y ahora tenemos una mesa de aspecto bastante decente donde podemos mostrar estas estadísticas. Entonces primero vamos a configurar un getter para mostrar el número de notas aquí. Así que vamos a saltar a nuestras tiendas fuente de archivos de tienda robaron notas dot js, saltamos a nuestros getters en una coma y agregue un nuevo Get up. Entonces podríamos llamar a esta cuenta total de notas que igual a una función de flecha, pasar en el estado. Queremos devolver el número total de notas en nuestras notas justo en nuestro estado. Entonces para acceder a la matriz de notas podemos hacer notas de puntos estatales. Por lo que sólo podemos devolver notas de puntos estatales. Y luego para obtener el número de elementos en la matriz o la longitud de la matriz, solo podemos hacer la longitud del punto. Ahorra eso. Vamos a saltar de nuevo a View Stats vista de puntos. Ahora necesitamos importar nuestra tienda. Así que vamos a establecer nuestras etiquetas de configuración de script en un comentario que dice entradas. Y vamos a importar notas de tienda de Estados Unidos desde slash store slash store notas que necesitamos asignar esto a una constante. Genial, otro comentario aquí bajo inicio const, notas de tienda es igual a usar notas de tienda. Ahora deberíamos poder usar nuestro getter. Entonces vamos a reemplazar este primer XXX después de número de notas con llaves dobles rizadas y notas de tienda. ¿ Cómo lo llamamos? Cuenta total de notas. Por lo que aún Notas puntan las notas totales cuentan. Guarda eso, y ahora vemos esa actualización a dos. Y sí tenemos dos notas. Si agregamos otra nota, tal vez un par más. Regresa a la página de estadísticas. Esto ahora dice For, puedes ver que podemos usar fácilmente todo lo que hay en nuestra tienda, cualquier lugar dentro de nuestra app y todos los datos en nuestra tienda y todos los resultados de nuestros captadores siempre se mantienen al día en tiempo real independientemente de donde vayamos dentro de nuestra app. Ahora eso configura un getter más para agarrar el número de caracteres de todas las notas. No estoy seguro si el número de caracteres simplemente cambia eso. Saltemos de nuevo a nuestra tienda, añadamos un nuevo getter, y llamaremos a esta cuenta total de caracteres en una función de flecha. Pase en el estado. Ahora vamos a tener que recorrer cada nota que está en nuestra matriz de notas para averiguar el número total de caracteres de todas las notas. Podríamos simplemente configurar una variable para contar esto. Crearé una variable llamada count set que sea igual a 0 por defecto. Y luego simplemente pasaremos por nuestras notas, a la derecha, la longitud del contenido de cada una, y luego añadimos esa longitud a esta variable de recuento y luego solo devolveremos esta variable de recuento al final. Por lo que podríamos usar un para cada uno para hacer esto. Para agarrar nuestra matriz de notas, solo podemos hacer notas de punto de estado que podemos usar un para cada método para recorrer cada nota en esta matriz ya que está haciendo un bucle esta matriz ya que está y está mirando a cada uno, vamos a necesitar un placeholder. Entonces solo usaremos note para eso, luego agregaremos una función de flecha. Esto va a mirar el primer nodo y asignarlo a este titular del lugar de nota. Por lo que sólo podemos dejar caer el contenido, no contenido de puntos, concepto de punto. Y luego para obtener la longitud de esa cuerda, solo podemos hacer longitud de punto. Podemos entonces solo agregar el resultado de esto a esta variable de conteo. Simplemente podemos hacer contar más iguala así. Y luego cuando esté hecho, mirando el primer elemento, saltará al segundo elemento y luego agarrar la longitud de la siguiente propiedad conceptual y simplemente seguir agregando a esta variable de recuento hasta que sea pasó por completo a través de la matriz. Entonces al final solo podemos devolver esta variable de conteo. Así que vamos a devolver conteos, guardar eso, recargar la página. O necesitamos realmente usar este getter, que hemos llamado recuento total de caracteres. Sólo voy a copiar ese nombre. Saltar a la vista, vista de inicio-inicio, selecciona este XXX llaves dobles rizadas. Y luego para usar nuestro gueto, solo podemos hacer cargas de tienda, puntos, recuento total de personajes, guardar eso. Ahora vemos esa actualización. Si saltamos a la página de notas, edita una de nuestras notas. Salta hacia atrás. Podríamos decir que este valor ahora se incrementa. Si eliminamos todas nuestras notas, salta a la página de Estadísticas. Ahora vemos que tenemos 0 nodos en 0 caracteres totales. 94. Directiva: Autofocus [Módulo 17]: Agreguemos una directiva personalizada a esto. Una cosa que podríamos hacer es crear una directiva personalizada la cual enfoca automáticamente esta área de texto cuando se carga la página, que el usuario pueda empezar a escribir de inmediato y notas sin tener que hacer click en ella. En primer lugar, vamos a resolver una directiva personalizada local dentro este componente Agregar edición de nota. No estoy diciendo que los componentes de origen, las notas y las notas de edición salten hacia abajo a la sección de script. Saltaré al fondo. Agreguemos aquí un nuevo comentario de bloque que dice directivas. ¿ Recuerdas cómo agregamos una directiva Costera Local? Siéntete libre de pausar el video, mira si puedes recordar cómo hacerlo. Pero lo que hacemos es crear una constante y necesitamos asegurarnos de que el nombre de esta constante empiece con una v minúscula y esté en CamelCase. Entonces podríamos llamar a esta vena autofocus. Establecemos esto igual a un objeto y podríamos añadir cualquier ganchos que queramos aquí como creado, vamos a usar montado y lo configuramos igual a un método como este, y podemos pasar el parámetro L aquí . Este parámetro l nos dará acceso al elemento una vez que esté montado como un en el elemento al que añadimos esta directiva V autofocus. Podemos entonces simplemente enfocarlo con enfoque de puntos L. Ahora solo podemos agregar esta directiva a cualquier elemento enfocado que esté en este componente. Entonces vamos a añadirlo a nuestra área de texto que está aquí. Recuerda que necesitamos cambiar el nombre que hemos usado aquí de CamelCase por el caso del guión. No podemos esto como este v dash autofocus. Ahorra eso. Y si recargamos esta página, podemos ver que el área de texto se enfoca automáticamente sin que necesitemos hacer click en ella. Dado que este componente de notas de edición de arte es un componente compartido que también se utiliza en la página de edición. También debe funcionar aquí también, lo que hace. Podemos ver el área de texto auto enfocada aquí también. 95. Directiva global: Autofocus: Ahora digamos que tenemos una entrada en nosotros Página de Estadísticas. Vamos a saltar a las estadísticas Página, Fuente, Vistas, vista, estadísticas punto vista. Y colapsaré nuestra mesa y agregaremos una entrada después de esto. Y pondré el tipo a textos y le daremos a este un placeholder. ¿ Te encanta? No bolas. Guarda eso, y salta a nuestra página de estadísticas para que esto se vea un poco más bonito. Mucha clase de insumos, que es de Bohmer. Eso es mejor. Digamos que también queremos autoenfocar este impulso cuando esta página se haya cargado. Bueno eso no va a funcionar actualmente. Si añadimos esta directiva sea autofocus aquí, guarde eso y recargue. Si miramos nuestra consola, podemos ver un error. No se pueden leer propiedades de lectura indefinida en profundidad. Eso se debe a que este enfoque automático V no existe dentro del contexto de este componente vista estadísticas punto vista solo existe en el arte editar notas dot componente Vue, donde lo hemos configurado aquí. Vamos a saltar de nuevo para ver estadísticas vista de puntos. Quita esta directiva de enfoque automático V, guárdelo, y salta de nuevo a nuestra página de notas y agrega editar nope dot view. Y hagamos de esta directiva una directiva global que podemos usar en cualquier lugar. Entonces, antes que nada, vamos a crear una nueva carpeta en nuestra carpeta fuente donde puedan vivir todas nuestras directivas. Así que voy a hacer clic derecho en la carpeta fuente, hacer clic en Nueva carpeta, y crear una carpeta llamada directivas. Dentro de eso vamos a crear un nuevo archivo llamado autofocus dot js. También podríamos darle el mismo nombre que nuestro nombre constante. Ahora vamos a saltar a añadir editar nope dot view, seleccionamos esta constante y córtala. Y también eliminemos este comentario y guardemos eso. Ahora vamos a saltar a un nuevo archivo V autofocus y pegar directiva en todo lo que necesitamos hacer es exportar esto, que se pueda importar desde nuestros componentes. Por lo que sólo podemos empezar las exportaciones por eso, salvo eso. Y ahora si saltamos a agregar edit self.view, sólo podemos importar esta directiva. Así que vamos a saltar a nuestras entradas y simplemente podemos hacer importar llaves rizadas V autofocus de las directivas slash slash el enfoque automático. Ahorra eso. Ahora sólo tenemos que añadir la directiva al área de texto, cosa que ya hemos hecho. Por lo que esto ojalá esté funcionando ahora y podamos ver cuando recargamos la página sigue siendo autofocus es el área de texto excepto ahora está usando esta directiva global que hemos creado. Así que utilicemos la misma directiva global en nuestra página de estadísticas. Vamos a saltar a ver estadísticas punto vista. Tenemos que importar la directiva. Por lo que sólo voy a saltar de nuevo a Agregar Editar nota dot Vue. Copia la instrucción import, salta a ver stats dot view, pega eso aquí, guarde eso, y ahora podemos usar eso aquí también. Entonces vamos a añadirlo a esta entrada que acabamos de crear. Entonces V dash también se enfoca, guardar eso, recargar y podemos ver esta entrada en la página de inicio es ahora autofocus también. 96. Mira el número de personajes (Watch): Agreguemos a esto un vigilante. Digamos que en nuestra vista de página de notas, notas vista de punto, queremos ver el número de caracteres que se están ingresando en esta área de texto. O en otras palabras, el número de caracteres en esta nueva nota ref que está en la vista notas vista punto. Y si eso llega a unos 100 personajes, queremos mostrar una elipse. Vamos a añadir un reloj ella para hacer esto en las notas de vista vista vista punto. Entonces, ¿recuerdas cómo agregamos un vigilante? Eso es correcto. Primero necesitamos importar el método de reloj desde la vista, y luego usamos este método de reloj. En la parte inferior aquí, voy a añadir un nuevo comentario que dice reloj. Los personajes utilizarán este método de reloj. El primer parámetro son los datos que queremos ver, y queremos ver esta nueva nota, href, solo podemos pasar en notas nuevas como primer parámetro. El segundo parámetro es un método método callback que se disparará en cualquier momento esta propiedad de datos que se especifica aquí cambia, si nos gusta, podemos pasar el nuevo valor en el valor antiguo aquí. Vamos a cerrar estos fuera. Entonces un cierre de sesión un nuevo valor y luego coma nuevo valor. Entonces duplicaré eso y cerraremos la sesión de valor antiguo. Ahorra eso, recarga. Si cambiamos los textos, podemos ver el valor antiguo y el nuevo valor siempre siendo bloqueado. Ahora en realidad no vamos a necesitar el viejo valor aquí. Me deshago de eso y me deshago de estos troncos. Si la longitud del personaje de esta nueva nota ref llega a 100, vamos a mostrar una elipse. Podemos simplemente agregar una declaración if para hacer esto. Entonces podemos hacer si valoras la longitud del punto para obtener la longitud del nuevo valor es igual a 100, entonces podemos alertar a alguien, iluminado solo 100 caracteres permitidos. Caray, maldad. Si recargo. Y sólo para que sea más fácil probar esto, voy a saltar al área de texto subyacente, que está en las notas de componentes de origen en impares editar la vista de punto de nota. Solo voy a agregar un atributo de longitud máxima a este conjunto que a 100. Vamos a probar esto. Simplemente podemos empezar a escribir en esta área de texto. Cuando llegamos a 100 caracteres, vemos las alertas. Podemos decir que nuestro vigilante está trabajando. 97. Composición - useWatchCharacters: Ahora digamos que queremos tener la misma funcionalidad de caracteres de reloj en nuestra página de estadísticas en esta entrada. Bueno, podríamos simplemente copiar este código de reloj, pegarlo en la vista de página de Estadísticas, estadísticas punto vista, y luego simplemente ajustar la propiedad de datos que estamos viendo aquí. Bueno entonces estaríamos duplicando código. Sería malo poner a este vigilante en su propio archivo composable, que podemos usar en todas partes. Entonces hagamos eso. Saltemos a nuestro explorador. Y queremos poner nuestra composable en una carpeta llamada use dentro de la carpeta fuente. Vamos a hacer clic derecho fuente y elegir Nueva carpeta. Crea una carpeta llamada usar esa dentro que creará un nuevo archivo llamado US watch characters ab.js. Para configurar una composable, solo necesitamos exportar una función con el mismo nombre que nuestro archivo. Usa personajes de reloj. Así. Vamos a saltar de nuevo a ver notas dot Vue. Acabo de atrapar a este vigilante. Salta a nuestra composable y pega eso aquí. En realidad soy backhaul Snopes punto view. Ahora podemos quitar el método de reloj que estamos importando. Guarda eso, salta de nuevo para usar personajes de reloj. Y sí necesitamos importar este método de reloj aquí. Apenas agreguemos entradas, miren desde la vista. Ahora para que este composable genérico, necesitamos poder pasar en la propiedad de datos que queremos ver como parámetro. Así que aceptemos eso aquí. Entonces podríamos simplemente llamar a este valor para ver o algo así. Lo que sea que estemos pasando aquí es lo que queremos ver aquí, vamos a cambiar nuevas notas a valor para ver y guardar eso. Y ahora deberíamos poder utilizar esto imposible para ver el número de caracteres de cualquier propiedad de datos dentro de nuestra app. Y luego mostrar esta alerta si golpea 100 caracteres. Entonces vamos a saltar a ver notas punto view, y necesitamos importar esta composable. Entonces las entradas usan caracteres de reloj. De slash users slash, USE watch characters. Di eso, saltemos a nuestra página de notas. Saltar hacia abajo al fondo. No deberíamos poder utilizar esta composable para ver esta nueva nota href, que está vinculada al área de texto. Simplemente podemos hacer uso de personajes de reloj y luego pasar en el rack que queremos ver. Nueva nota, tenga en cuenta, guarde eso. Veamos si eso sigue funcionando. Sigue trabajando. Y ahora también deberíamos poder utilizar la misma funcionalidad en nuestra página de estadísticas. Así que vamos a saltar a nuestra página de estadísticas. Vistas, vista, Stop, Stop view. Nuevamente, necesitamos importar esta composable. Simplemente copiaré la línea de entrada desde la vista. Nota parada Ver. Pega eso aquí. Y ahora deberíamos poder usarlo también en la página de estadísticas. obstante, no tenemos una configuración de propiedad de datos para esta entrada aquí. Así que vamos a configurar eso. Mucho comentario aquí, que dice bolas de nota de amor casi pone un href. Entonces const, love note balls equivale a un href con un valor inicial de una cadena vacía, y necesitamos importar ref desde la vista. Vamos a agregar eso a la entrada superior ref desde la vista. Ahora vamos a unir esta balsa a la entrada. Aquí está la entrada. Modelo V. Ponerlo demasiado bajo de bolas de nota. Ahorra eso. Vamos a cambiar este valor predeterminado para ver si está conectado. Aún así. Eso es todo lo que tomó. Ahora deberíamos poder ver a los personajes en esta entrada. Así que de nuevo, solo podemos hacer uso de personajes de reloj pasando el naufragio que queremos ver, que es amor, nope, bolas, amor, bolas de nota. Santo que. Ojalá debamos ver aquí la misma funcionalidad. Sí, está funcionando. 98. Composición - Varios parámetros: Hagamos que nuestro uso ver personajes componibles un poco más flexible. Por lo que en este momento la alerta siempre será disparada cuando la longitud de los personajes alcance un 100. Pero digamos que queremos poder ajustar el número de caracteres en los que se encuentra esta phi. Digamos que en la página de notas queremos averiguar esto 100 caracteres. Pero en la página de estadísticas de esta entrada, queremos encontrar esto hasta 50 caracteres. Bueno, podríamos hacer esto agregando otro parámetro para usar la función root de caracteres de reloj aquí. Agreguemos aquí un segundo parámetro llamado tarros max. Podemos pasar lo mismo cuando usamos esta composable en nuestros componentes en nuestra declaración if aquí, lugar de si NewValue like es igual a un 100 hará si nuevo valor dot length es igual a max chars, voy reemplace un 100 caracteres máximo de ancho, y también emitiremos este número en nuestra alerta también. Cambiaré esto a una cadena de plantilla. Voy a reemplazar las llaves rizadas de $100 me permiten poner este max chars. Vamos a conseguir que tanto los parámetros de frascos establezcan un valor predeterminado en caso de que no se haya proporcionado. Podríamos hacer eso simplemente estableciendo caracteres max es igual a 100. Ahorra eso. Dado que actualmente no estamos proporcionando el parámetro de este hijo max en la página de notas, entonces esto debería funcionar como lo hacía antes. Al disparar las alertas son unos 100 caracteres. Vamos a probar eso. Sin embargo, aún no se trabaja en un 100 personajes. Digamos que en nuestra página de notas, solo queremos usar la funcionalidad predeterminada con unos 100 caracteres. Pero en nuestra página de estadísticas queremos que los caracteres max sean 50 caracteres. No veamos la página de estadísticas en jolt para ver estadísticas vista de puntos. Desplazemos hacia abajo hasta donde estamos activando nuestra composable, pasando el segundo parámetro de 50. Ahora vamos a salvar eso. Recargar. Esto debería estar disparando un poco antes ahora a 50 caracteres, dice que sólo se permiten 50 caracteres. Caray, maldita sea. Y así nuestra composable ahora es mucho más flexible y útil. Y por supuesto podríamos hacerlo más flexible con parámetros adicionales, etcétera Ahora para una simple composable como esta, que sólo contiene un vigilante, entonces tiene sentido simplemente importar el composable y acaba disparar la función composable raíz como lo estamos haciendo aquí. Pero para más complicados, componibles, que contienen un montón de cosas diferentes como datos, métodos, propiedades computadas, etcétera Entonces tiene más sentido extraer sólo las cosas que necesitamos del composable utilizando la estructuración. Y para un recordatorio de cómo lo hacemos con composable más complejo, salta de nuevo al Módulo 11. El módulo composable. 99. Haz clic en Composable (VueUse, Template Refs): Hemos creado una composable personalizada, pero también agreguemos una composable desde la biblioteca de vistas. Y si miramos aquí nuestro menú móvil, actualmente la única forma en que podemos cerrar esto es haciendo clic en la x No podemos cerrarlo haciendo clic fuera de él, como solíamos esperar. Entonces vamos a utilizar uno de los componibles desde la vista use biblioteca para resolver este bosque. Vamos a saltar para ver use.org. Empieza. Tenemos que instalar esto primero. Hablemos con nuestra terminal. Mata. El proceso de muerte ejecutará este comando para instalar Vue use. No he terminado, así que vamos a relanzar nuestra app con npm run dev. Por el lado de la vista, vamos a ir a funciones de menú, sentidos. Vamos a usar este onclick fuera composable. Entonces vamos a hacer clic en eso. Podemos ver un ejemplo aquí. Podemos abrir un modal. Podemos cerrarlo con el botón X, pero también podemos cerrarlo haciendo clic en cualquier parte fuera del modal. Entonces escondamos aquí la terminal. Cierre todos nuestros componentes. Abre el diseño de componentes de fuente de barra de navegación, Napa. Veamos el código de ejemplo aquí. Necesitamos importar el onclick fuera composable desde el uso de la vista. Entonces vamos a copiar esa línea eso a nuestra sección de reporte aquí. Podemos ver en este ejemplo aquí necesitamos configurar una plantilla REF que destruya al elemento antes de poder usar esto. Así que descubramos suficiente elemento de menú, que está aquí, este div con una clase de menú de guión navbar. Agreguemos un ref a esto. Podríamos llamar a este menú navbar ref o algo así. Saltemos a la sección de guiones. Mucho comentario aquí que dice click afuera para cerrar. Necesitamos configurar nuestra plantilla href. Podemos ver en este ejemplo aquí. Crearemos una constante con el mismo nombre que nuestro ref, cuál es dónde ha ido? Suficiente, menú bomba ref. Entonces const navbar, menu ref dt es igual a ref con un valor predeterminado de null. Ahora podemos usar esta composable. Así que vamos a copiar esta línea aquí. Pega eso aquí, cambia el objetivo a este href aquí. Entonces copiaré eso, pegaré eso ahí, guarde eso. Y vamos a mostrar el menú móvil. Despeja la consola y haga clic afuera en algún lugar. Y pudimos ver los objetos de los eventos siendo encerrados aquí. Entonces eso parece estar funcionando. Pero no queremos simplemente cerrar la sesión del objeto de evento. Así que voy a seleccionar todo eso y agregaré llaves rizadas y agregaré una nueva línea en el medio. Esta referencia de Show Mobile Nav determina si se muestra o no el menú móvil. Por lo que sólo podemos volver a poner esto en falso. Una vez que hemos hecho clic afuera. En este método onclick externo, solo podemos hacer Show Mobile Nav valor es igual a false. Simplemente quitaré el objeto del evento de aquí porque no vamos a necesitar eso. Guarda eso, y veamos si está funcionando. Muestra el menú. Haga clic afuera. Vemos que desaparece. No obstante, ahora no está cerrando el menú móvil cuando hacemos click en la X. Veamos si podemos arreglar eso. Vamos a saltar hasta ese botón, que está aquí. Creo que veo lo que está pasando aquí. Actualmente el menú móvil está mostrando lo que hicimos clic en el botón de hamburguesa. Porque esto está fuera del menú móvil. Está activando el evento onclick externo al configurar Mostrar Mobile Nav de nuevo a false al ocultar el menú móvil. Lo que llamamos. También tenemos este manejador de clics en el botón de hamburguesa. Esto es entonces disparando este código, que va a establecer show mobile nav a lo contrario de sí mismo. Este punto lo va a volver a hacer realidad. Si saltamos de nuevo a la documentación onclick fuera y desplazamos un poco hacia abajo, en realidad podemos agregar un objeto options como un tercer parámetro después del objetivo, el manejador, donde podemos tener este ignore opción para decirle a la composable qué elementos ignorar la funcionalidad exterior onclick. Podríamos simplemente hacer que ignorara todos los clics en esta hamburguesa navbar. Ahora necesitamos configurar primero una plantilla ref para este agar bob. Agreguemos un ref a este colono T2 nav bar, hamburguesa ref. Ahorra eso abajo. Necesitamos configurar datos ref para eso aquí, voy a duplicar éste. Cambia esto a costar navbar burger ref. Entonces en esta función onclick exterior, después de nuestra función de manejador, podemos agregar coma y luego un objeto que dentro que no podemos ignorar opción. Establezca eso igual a una matriz, pase en la plantilla ref resolver cualquier elemento que queremos que esta composable ignore. Así que pasemos en este mendigo navbar F, pega eso ahí, guarde eso. Veamos si eso está arreglado. Haga clic en el botón. Aún podríamos cerrarla haciendo click sobre la X. Veamos si aún podemos dar click afuera para cerrarla. Y sí, podemos. 100. Eliminar el diseño modal (objetos reactivos): De acuerdo, por lo que nuestra aplicación está básicamente completa. En esta salida hemos cubierto casi todo lo que cubrimos en los módulos anteriores. Solo hay una cosa más que quiero agregar, es un modal que se muestra cuando hacemos clic en el botón Eliminar para pedirle confirmación al usuario antes de que se elimine la nota. Las razones por las que quiero añadir esto son el número uno, nos permitirá añadir unos objetos reactivos a nuestra app, que aún no hemos utilizado. Número dos, nos permitirá usar algunos ganchos de ciclo de vida que aún no hemos utilizado. Número tres, nos ayudará a solidificar nuestro conocimiento de datos sobre eventos a través de componentes padre e hijo utilizando apoyos, emite, valor del modelo y actualizar el valor modal. Y creo que es una buena idea volver a repasar estas cosas padre-hijo, porque estos conceptos pueden ser bastante confusos, sin embargo son realmente K para crear aplicaciones API de composición sólida. En primer lugar, vamos a crear un nuevo componente para nuestro modal. Voy a saltar a componentes fuente, notas. Y no quiero crear un nuevo archivo en esta carpeta llamada modal Eliminar Nota punto vista. Por ahora, solo voy a sacar etiquetas de plantilla ahí dentro. Dave. Sólo pondré los textos. Se trata de un modal. Guarde eso ahora en nuestras notas componente nota punto vista. Vamos a saltar a eso. Notas de componentes. No, vista de punto. Agreguemos un objeto reactivo donde se muestre la propiedad para determinar si se muestra o no este modal. Voy a importar ref review, así que agregaré eso aquí. Entonces me desplazaré hacia abajo hasta el fondo. Voy a añadir un comentario de bloque que diga modales. Voy a configurar un nuevo objeto reactivo llamados modales. Modals es igual a reactivo, reactivo que necesitamos importar desde la vista, no href. Vamos a reemplazar eso por reactivo. Pasando el objeto. Y voy a agregar una propiedad llamada Eliminar Nota Establecer punto igual a false. Esta propiedad determinará si se muestra o no el modal. Si es falso, no lo mostramos. Y si es cierto, entonces sí lo mostramos. El motivo por el que he usado aquí un objeto reactivo es porque en muchas aplicaciones como esta, podríamos tener un montón de modelos diferentes. Por ejemplo, ahora mismo cuando editamos una nota, saltamos a una nueva página, pero podríamos decidir reemplazar esta funcionalidad por un modal para editar las notas. Este objeto reactivo nos da un lugar donde podemos gestionar todos nuestros modelos juntos. Es posible que tenga otra propiedad aquí, edite notas, y luego use esta para administrar editar notas modales. Pero por ahora solo vamos a agregar este eliminar notas modales, así que me deshago de eso. Ahorra eso. Vamos a importar nuestro nuevo componente modal y solo mostrarlo cuando esta propiedad delete notes es verdadera. Entonces saltaremos a nuestros insumos. Vamos a importar modal borrar nota de slush components slash notes, slash modal delete, notas vista de punto. Yo lo guardaré. Y ahora vamos a colocar esto después de nuestro elemento de pie de página modal. Suprímase nota. Ahorra eso. Y ahora podemos ver eso en ambas notas. Pero solo mostremos esto cuando los modales Dot Dot Dot Dot Note sea true. Por lo que mucho v-if dirigido a este modal v dash, si modales, puntos, eliminar, nota, guardar eso. Y vemos desaparecer el modal. Si cambiamos modales dot delete node a true, entonces lo vemos reaparecer. Vamos a volver a poner eso en falso y guardar eso. Ahora vamos a usar las balas para crear un modal de aspecto agradable. Así que vamos a saltar de nuevo al sitio de molino de bolas en el.io docs a componentes y modal. Vamos a desplazar un poco hacia abajo aquí. Vamos a usar este ejemplo de tarjeta modal, que se ve bastante bien. Voy a copiar todo el código para esto. Saltar a modal, Eliminar, Nota punto Vue. Sólo pega todo eso aquí. Deshazte del div que agregamos antes. En densa todo un poco y guardar esa recarga para que en realidad podamos ver este modal cuando hacemos click en Eliminar. Vamos a saltar a nuestro botón Eliminar en la vista de puntos Nope , que está aquí. En lugar de activar nuestras notas de eliminación, acción en nuestra tienda, en cambio solo mostrará este modal. Para ello, solo podemos hacer modales, Dot, Dot, Date , notas igual a true. Ahorra eso. Haga clic en Eliminar. Todavía no estamos viendo el modal. Veamos si se está agregando a nuestra maqueta aquí. Por lo que inspeccionaré esta nota. Podemos decir que el modal se ha agregado a la página, pero no lo estamos viendo. Creo que eso es porque necesitamos sumar una clase de activa al modal. Ahora lo podemos ver. Así que vamos a saltar de nuevo a nuestro componente modal y agregar esta clase a la raíz está activa. Ahorra eso. Ahora vamos a hacer clic en el botón Eliminar. Ahora podemos ver el modal. Ahora vamos a modificar esto un poco. Vamos a cambiar este título aquí, título modal para eliminar notas, interrogación, guardar eso. Y agreguemos algo de contenido al vello corporal. Por lo que dentro de esta clase de cuerpo de tarjeta modal, acabamos de añadir, tú. Seguro. Desea eliminar esta nota, guarde eso. Y ahora podemos ver ese mensaje. Ahora quiero alinear estos botones hacia la derecha. Si nos dirigimos a este elemento de pie con una clase de flashcard modal dash four. Podemos hacer esto agregando una de las clases de Flexbox de Ballmer, que es sólo para phi dash, dash, dash y decir, en realidad creo que es justificar flex de contenido y vamos a probar eso. Ahorra eso. Nuevamente, se pueden encontrar todas estas clases documentadas en el antiguo sitio. Vale, ahora voy a intercambiar estos botones por ahí. Pon primero el botón cancelar dentro de este pie de página. No quiero cambiar el texto en este botón Guardar cambios para eliminar. Creo que tiene sentido hacer rojo este botón para que podamos simplemente cambiar. Esto es el éxito. La clase dos es peligro. Para que sea leída. Este modal se ve bastante bien ahora. Ahora sólo tenemos que conseguir que se comporte correctamente. Para que ese número uno, podemos ocultarlo cuando hacemos click en esta X o en el botón Cancelar. Si pinchamos fuera del modal. Para ello, vamos a utilizar nuestro click fuera composable desde el uso de la vista nuevamente. También necesitamos conseguir esto para realmente eliminar la nota cuando hacemos clic en el botón Eliminar. También vamos a agregar algo de control de teclado a esto para que el usuario pueda golpear Escape para cerrar el modal. Para ello, vamos a hacer uso de algunos ganchos para el ciclo de vida. 101. OIDA el modal Eliminar (modelValue y Modal: Si el usuario hace clic en este botón de consejo o esto explota en ellos, queremos ocultar este modal. Ahora estos botones están en nuestro componente hijo. Modal Eliminar Nota vista de puntos. Pero si el usuario hace clic en estos botones, entonces queremos modificar los modales Dot, Delete Note propiedad que está en el componente padre. Una forma en que podríamos hacer esto es emitiendo un evento de cliente cuando hacemos clic en estos botones. Y luego en el componente padre, anote la vista de punto, escuchando ese evento. Y cuando se reciba. Establecer modales Dot, Delete, Note, box o false. No obstante, como aprendimos anteriormente en el curso, realidad no necesitamos hacer esto. No podemos obtener un componente hijo modificar directamente una propiedad de datos que está en su componente padre. Al pasar esta propiedad de datos reactivos hacia abajo al componente hijo usando V-model, luego recibiendo el valor del modelo V usando el prop de valor del modelo especial, y luego actualizando la fuente de ese valor modal en el componente padre mediante el uso del valor del modelo de actualización. Bueno, antes que nada, pasemos los modales Dot Dot Delete Note al componente hijo usando V-model. Vamos a saltar a modal eliminar ningún componente aquí. Se me permite av, modelo de directiva y set.seed lo mismo que los modales Dot Borrar notas, pegue eso ahí, guarde eso. Y ahora podemos recibir este modelo V usando el prop de valor modal especial, los componentes child. Así que vamos a saltar a modal eliminar nope dot view. El apartado script sobre el atributo configura nuestros apoyos. Por lo que hay mucho comentario aquí que dice apoyos. Soy un let que una constante llamada props y set que igual al método define props pase en un objeto y definiremos nuestros apoyos aquí. Para recibir esta propiedad de datos que estamos pasando con el modelo V, necesitamos usar el prop de valor del modelo, establecer eso igual a un objeto. El tipo va a ser mil millones porque los modales, Dr. Lee No, son mil millones únicamente van a ser verdaderos o falsos y casi fijan el default a falso. Para asegurarse de que esto se está pasando correctamente y recibido correctamente. Vamos a hacer salir este prop de valor modal en nuestra plantilla. Entonces después de los textos que agregamos al cuerpo, voy a añadir una etiqueta pre y solo salida dobles llaves rizadas y valor modal. Guarda eso, vuelve a cargar la aplicación, haz clic en Eliminar. Y sí, podemos ver que eso está pasando porque podemos ver verdad aquí. Ahora solo quitemos esta etiqueta pre. Ahorra eso. Ahora vamos a crear un método que se puede disparar cuando hacemos clic en el botón X o en el botón Cancelar. Así que vamos a saltar a la sección de script en modal Eliminar Nota punto Vue. Va a agregar una sección llamada close modal. Crearé una constante llamada colono modal cercano igual a una función de flecha. Por ahora solo cerraremos la sesión cerca modal. Ahorra eso. Ahora activemos este método en nuestros botones. Entonces el botón de cancelar, sólo va a romper esto en múltiples líneas. Dividir los atributos. Manejador de clics melódico, haga clic igual a cerrar modal. Entonces voy a copiar este manejador de clics, encontrar este pequeño lo exporta. ¿Dónde está esa cosa? Aquí está, voy a dividir eso en múltiples líneas. Dividir los atributos, solo pega en ese clic en, Guardar eso. A menos que asegúrate de que este método modal cercano esté disparando. Haga click en el botón Cancelar, vemos el log. Haga click en el botón X, vemos el log. Ahora solo tenemos que emitir el evento de valor del modelo de esperanza DAG en este método. En primer lugar, necesitamos definir nuestros mitos. Deje que sod nuestra sección mitones, cree una constante llamada emit. Establecer que igual a la definición emite método pase en una matriz. Simplemente agregaremos las actualizaciones volumen del modelo de colon. Decir que ahora podemos emitir este evento especial en nuestro método modal de ropa. Simplemente podemos hacer emitir y luego esperar día valor modal. Entonces esto va a cambiar la propiedad de datos fuente en el componente paralelo que estamos pasando con V-model y recibiendo con valor modal. Se va a actualizar esta propiedad Delete Note en el par de vista de punto de nota de componente, necesitamos decirle a qué valores establecerla. Y queremos ocultar el modal, por lo que queremos volver a poner esto a falso. Saltemos a este emite. Simplemente podemos empezar false como segundo parámetro. Digamos que el pensamiento. A ver si está funcionando. Muestre el modal de eliminación, haga clic en la X, y eso está funcionando. Haga clic en consejo. Y eso también funciona. 102. Eliminar modal: haz clic en en Exterior para cerrar: Sería mejor que este modal se cerrara si pulsáramos en cualquier parte fuera del auto. Esa es la funcionalidad que esperaríamos de un modal como este. Recuerda que usamos ese click fuera composable anteriormente desde vista uso para hacer este Menú de Nav Móvil desaparecer este Menú de Nav Móvilcuando hacemos clic fuera de él. Podríamos usar eso otra vez. Bueno, antes de que hagamos eso, no me gusta el hecho de que no haya relleno alrededor de este modal. Cuando estamos en un ticket de pantalla más pequeña, se ve mejor con un poco trazando este div con la clase de modal y solo tipo de agregar una clase de H2 para darle a eso un poco de relleno. Eso se ve un poco mejor. Yo creo. Vamos a utilizar ese click fuera composable aquí para que podamos cerrar este modal. Permítanme hacer click fuera de la tarjeta. Voy a saltar al Explorador. Solo voy a hacer clic con el botón derecho en la carpeta fuente y elegir Buscar en carpeta y buscar click afuera. Hay un sin oposición. Así que vamos a saltar a eso. Voy a copiar esta entrada. Entonces salta a modal eliminar nodo punto vista. En esto también, está arriba. Importar, Pegar ese salto. Pero a no ver Bardot. Ahora vamos a copiar todo este código. También podríamos copiar el comentario también. Saltar hacia atrás para eliminar modal. Voy a pegar esto en la parte inferior. Recuerda que necesitamos una plantilla ref para decirle a esta composable qué elemento vamos a estar haciendo clic fuera de dos, luego haz algo. Vamos a reemplazar este menú navbar ref aquí y aquí con lo que vamos a estar haciendo click fuera de esta tarjeta discontinua modal div. Podríamos llamar a esta tarjetas modales ref. Agreguemos esto a la tarjeta modal. Los atributos. Este href, cod modal ref, salvo eso. No creo que vayamos a necesitar esta opción de ignorar. Sólo voy a eliminar este tercer parámetro, este objetos en esta coma así como eso. Y podemos deshacernos de esta ref de datos, que estábamos agregando a esa opción de ignorar. Ahora cuando hacemos click afuera, solo queremos ocultar el modal activando este método close modal. En realidad podemos simplemente seleccionar todo este manejador aquí desde la corsé rizada de cierre hasta estos paréntesis. Acabo de poner el nombre de nuestro método cerca modal. Vamos a ahorrar eso, a ver si eso está funcionando. Recargar, mostrar el modal. Aquí tenemos un error. Href no está definido. Supongo que necesitamos importar el método ref desde la vista. Importaciones desde la vista, salvo eso. Recargar. Mostrar el clic modal afuera. Sí, está funcionando. Vamos a asegurarnos de que no se esté disparando erróneamente, como antes estaba en la barra de navegación. Sólo son despedidos si hacemos clic justo fuera de la tarjeta. Y el consejo y los expertos siguen trabajando. 103. Eliminar modal: control del teclado (ganchas de ciclo de vida): Normalmente esperamos poder cerrar un modal como este pulsando la tecla Escape en nuestro teclado. Vamos a configurar algún teclado no había enlazado en el gancho montado de este modal Delete Note dot componente Vue. Voy a saltar a modal Eliminar Nota hablar contigo, y abajo al fondo. Voy a crear un comentario llamado control de teclado. Se me permite un passe de gancho desmontado y un manejador a eso así. Y acabamos de cerrar la sesión montada por ahora, digamos que tenemos un error aquí en montado no está definido. Eso es porque tenemos que importar este gancho de ciclo de vida desde la vista, listones fuera que golpean en derretido, guardar esa recarga, mostrar el modal y podemos decir desmontado que se cierra la sesión. Si lo ocultamos y lo volvemos a mostrar, podemos decir que desmontado se cierra de nuevo. Ahora dentro de una multiherramienta, vamos a configurar un oyente de eventos para el evento clave, que se disparará después de presionar una tecla y luego soltarlo. Deshaznos de este registro. Y podemos simplemente hacer documentar puntos, agregar evento, oyente, paréntesis, y luego seguir el primer parámetro. Este es el soporte que va a escuchar, y vamos a escuchar el evento. Y el segundo parámetro es nuestro manejador. Así que agreguemos aquí una función de flecha. Pasemos también en el objeto de evento. Voy a reemplazar estos paréntesis con una a, y luego simplemente cerraremos eso por ahora. Console.log. Guarda eso y recarga, muestra modal y pulsa la tecla de escape. Y podemos ver que el evento del teclado está bloqueado. Dentro de este evento objetos. Podemos ver que cuando pulsamos la llave Escape, esta propiedad clave está configurada para escapar. Esta propiedad clave es generalmente la propiedad que queremos comprobar en nuestro JavaScript para determinar qué clave se presionó. Comprobemos si se presionó la tecla de escape. Y si es así, entonces sólo podemos disparar método modal cercano, ocultando así el modal. Entonces vamos a eliminar este console.log. Y sólo podemos hacer si un punto k es igual para escapar de ellos, sólo se podría disparar el modal cercano. Un método. Ahorra eso. Recargar, mostrar el modal, golpear la tecla de escape. Y eso está funcionando. Vemos desaparecer el modal. No obstante, sí tenemos un tema aquí. Si miramos algo dentro de este oyente de eventos, podemos simplemente cerrar la sesión, cerrarlo. Ahorra eso. Ahora si recargo, click en Eliminar para mostrar el modal y pulsa Escape. Vemos cerrarlo siendo bloqueado una vez. Pero si muestro otro hit modal Escape, ahora ha sido bloqueado dos veces esta vez. Y si volvemos a mostrar un modal, golpeó escape. Esta vez ha sido bloqueado tres veces. Esto se debe a que incluso después de que se cierre el modal, este oyente de eventos sigue existiendo. Este oyente de eventos no se está eliminando cuando cerramos el modal. Cuando mostramos por primera vez un modal, se configura este oyente de eventos. Permítanme cerrar el modal. Esto todavía está configurado. Después abrimos otro modal. Luego configuramos un segundo oyente de eventos. Esta parte, ahora tenemos dos de estos oyentes de eventos disparando. Lo tengo. Seguiremos agregando un nuevo oyente de eventos cada tau mostramos un nuevo modal. Entonces lo que tenemos que hacer es eliminar este oyente de eventos cuando el modal esté cerrado. Y podríamos hacer esto en el gancho desmontado, que será phi había ido en modal se retira del dom. Ahora primero, para que un oyente de eventos sea removible, necesitamos poner su función de devolución en su propia función con nombre. Ambas charla multi. Voy a crear una constante llamada mango. Teclado. Establezca eso igual a una función de flecha. Pasar en el parámetro, el objeto de evento. Ahora voy a cortar estas dos líneas y pegarlas en esta nueva función. Ahora sólo podemos seleccionar todo este manejador desde la llave de cierre rizado hasta la a. sólo pasa en el nombre de esta función, mango, teclado. Vamos a salvar eso. Me aseguraré de que eso siga funcionando. Golpea la tecla Escape. Eso sigue funcionando. Ahora solo tenemos que quitar a este oyente de eventos en la charla desmontada. Después de la charla desmontada con Loudon en gancho desmontado, pase en un manejador de funciones de flecha. Ahora para eliminar este oyente de eventos, solo podemos usar el método remove event listener. Solo voy a copiar toda esta línea, pegar línea aquí y cambiar el oyente de eventos para eliminar el oyente de eventos. Ahorra eso. Y sí necesitamos sumar la esperanza montada desconocida a nuestras importaciones. Vamos a añadir que aquí en montado. Ahorra eso. Ahora veamos si esto está funcionando. Haga clic en el botón Eliminar, mostrar el hit modal Escape. Vemos nuestro tronco siendo despedido sólo una vez. Haga clic en Eliminar de nuevo, mostrar el hit modal Escape. Ahora vemos cerrarlo solo se cierra una vez más. Entonces esto no está funcionando. El oyente de eventos se está eliminando cuando se cierra el modal. Y si seguimos golpeando a Escape aquí, no vemos nada bloqueado. Ahora podemos simplemente quitar el registro de la consola de la función de teclado handle. Ahorra eso. Ahora todo lo que tenemos que hacer es eliminar este futbol. Cuando el usuario hace clic en ON eliminar en el modal. 104. Eliminar modal: elimina la nota: Lo final que tenemos que hacer es en realidad eliminar las notas que el usuario está tratando de eliminar al hacer click en este botón rojo eliminar. Ahora ya tenemos una acción Delete Note en nuestra tienda. Estantes, tiendas, y tienda Node.js a las opciones. Ya tenemos esta Delete Note acciones configuradas las cuales podemos utilizar para eliminar las notas. En todo este oxígeno se espera es el ID del nodo que queremos eliminar. Por lo que sólo podemos desencadenar este oxígeno directamente en nuestro modal Delete Note dot componente Vue. Vamos a saltar a eso. En el botón eliminar, que está aquí. Solo queremos desencadenar esa acción en nuestra tienda. Eliminar nota que está esperando un ID, pero en realidad no tenemos acceso al ID de notas dentro de este componente. No obstante, si saltamos a su componente padre note dot view, entonces sí tenemos acceso a toda la información de notas aquí en esta nota prop. Podríamos usar esto para pasar el ID de la nota hacia abajo al componente secundario modal delete node dot view usando un prop. Vamos a saltar a un componente modal delete nope, que está aquí. Podríamos pasar los objetos enteros de la nota. Podemos llamar a este conjunto de notas que igual a las notas. Esto pasaría por todos los objetos con tanto el ID como el contenido. No obstante, en realidad sólo necesitamos el ID. Por lo que también podríamos pasar sólo la identificación hacia abajo. Para ello, podríamos pasar notas abajo y tal vez simplemente cambiar el nombre del prop a anotar ID, CamelCase. Ahorra eso. Ahora necesitamos recibir el apoyo ID de esta nota, el modal Delete Note dot Vue componente. Así que vamos a saltar a eso. Saltar a nuestros apoyos. Se me permite que este tipo de prop va a ser cadena. Haré que esto sea necesario también. Voy a establecer requerido a verdadero. Vamos a guardar eso y asegurarnos de que estas propiedades de ID de nodo pasen. Después de nuestro contenido aquí. El modal, sólo vamos a salir pre-charla con llaves dobles rizadas y anotar ID, guardar eso, recargar y mostrar el modal. Y sí, podemos ver que ID1 escupe hacia fuera para la primera nota, un ID para ser escupir para la segunda nota. Deshaznos de esta pre etiqueta. Ahora sólo tenemos que importar nuestra tienda, opiniones se almacenan en este componente modal, ajustar, activar esta subasta de borrar Nota y pasar en el ID. En primer lugar tenemos que importarlo. Podemos simplemente hacer la importación. Usa notas de tienda de slash stores slash store. En realidad no, agreguemos tiendas slash slash las notas de la tienda. Ahorra eso. Tenemos que asignar esta tienda a una constante. Entonces después de nuestros apoyos y límites dentro de un comando de tienda, y simplemente hacer const store notes iguala usar notas de tienda, paréntesis. Ahorra eso. Y ahora deberíamos tener acceso a una tienda aquí. Esta acción Eliminar nota dentro de la tienda. Saltemos al botón Eliminar, que está aquí. Dividiré esto en varias líneas, dividiré los atributos en varias líneas, agregaré un manejador de clics. Solo queremos despedir la subasta Delete Note que está en nuestra tienda. Por lo que sólo podemos hacer robó notas, Dot Delete, anotar, pasar en el ID. Y de nuevo, estamos pasando el ID, apoyo de identificación de esta nota. Podemos simplemente hacer robó notas Dot Borrar notas, notas, ID. Vamos a guardar eso y ver si está funcionando. Recargar, haga clic en Eliminar. Haga clic en Eliminar de nuevo. Podemos ver que la nota fue borrada. También podemos ver que el modal se está ocultando automáticamente también. Permítanme hacer clic en Eliminar. Y eso se debe a que el modal es un componente hijo de la vista de punto de nota. Nota vista de punto es el componente que estamos utilizando para mostrar una nota. Cuando eliminamos una nota, esa nota dot componente Vue se elimina del volcado junto con todos sus componentes hijo, incluyendo modal Delete, Note dot componente Vue. 105. Ronda del curso: Enhorabuena, lo lograste hasta el final. Espero que ahora se sientan listos para empezar a construir sus propios ups con V3 y la increíble API de composición. También espero que este curso te haya ayudado a comprender los beneficios masivos que vienen con la API de composición sobre la API de opciones. Asegúrate de conservar los conocimientos de este curso mediante la creación de aplicaciones con la API de composición. En cuanto cuentes, podrías intentar reconstruir las bolas de Nope desde cero por tu cuenta. O podrías intentar construir un clon de uno de tus ups favoritos. Si quieres aprender más de mí y saltar a Danny's dot link slash YouTube, donde puedes encontrar mis maquillajes de canal de YouTube con Danny, donde comparto toneladas de contenido gratis en Vue.js, quasar framework, embellecer y código VS en mucho más. También echa un vistazo a mis otros cursos de freemium se hacen iz dot link slash cursos. Todos los enlaces a mis cursos premium en esta página aplicarán automáticamente mi descuento especial. Entonces cada curso, tengo un curso sobre embellecer, que es el framework de componentes más popular para Vue.js. Desafortunadamente, en su momento estoy grabando este embellecido no soporta unos tres, pero ojalá lo hará pronto. Entonces tengo tres cursos en quasar framework, que es un framework absolutamente increíble que te permite crear un Vue.js arriba con una sola base de código, desplegarlo en muchas plataformas diferentes. Puedes implementarlo en una aplicación real que se puede implementar en las tiendas de aplicaciones para iOS, Android, Mac y Windows. Puedes implementarlo en una aplicación de una sola página y en el lado progresivo del servidor de aplicaciones web renderzadas incluso hasta una extensión del navegador para Chrome o Firefox. La última versión de quasar, esos soportan V3 y la API de composición. No obstante, en el momento que estoy grabando esto, estos cursos son para U2 y la API de opciones. No obstante, con todas las habilidades que has aprendido en este curso, deberías poder seguir junto con estos cursos usando v3. Soy la API de composición. Por último, tengo un curso corto donde te enseño los conceptos básicos de HTML, CSS y JavaScript. Adjuntaré enlaces a mi canal de YouTube en la página Cursos a esta conferencia. Gracias por ver, y espero que disfruten construyendo cosas con la API de composición.