|
1 | 1 | # Compatible con Vue
|
2 | 2 |
|
3 |
| -!> Este archivo aún no está traducido al español, estamos traduciendo... ¡Danos una mano con la traducción! |
| 3 | +Docsify permite agregar contenido de Vue directamente a tus páginas de Markdown, lo que puede facilitar el trabajo con datos y agregar reactividad a tu sitio. Para comenzar, debes agregar Vue 2.x o 3.x a tu archivo `index.html`. Puedes elegir la versión de producción para tu sitio en vivo o la versión de desarrollo para obtener advertencias útiles en la consola y admitir las herramientas de desarrollo de Vue.js. |
4 | 4 |
|
5 |
| -Puede escribir componentes Vue directamente en el archivo Markdown, y será _analizado_. Puede usar esta función para escribir una demostración y documentación vue juntos. |
| 5 | +## Vue 2.x |
6 | 6 |
|
7 |
| -## Uso básico |
| 7 | +Para Vue 2.x, puedes agregar las siguientes líneas de código a tu `index.html`: |
8 | 8 |
|
9 |
| -Carga VUE en `./index.html`. |
| 9 | +```html |
| 10 | +<!-- Producción --> |
| 11 | +<script src="//cdn.jsdelivr.net/npm/vue@2/dist/vue.min.js"></script> |
| 12 | + |
| 13 | +<!-- Desarrollo --> |
| 14 | +<script src="//cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> |
| 15 | +``` |
| 16 | + |
| 17 | +## Vue 3.x |
| 18 | + |
| 19 | +Para Vue 3.x, puedes agregar las siguientes líneas de código a tu `index.html`: |
10 | 20 |
|
11 | 21 | ```html
|
12 |
| -<script src="//unpkg.com/vue"></script> |
13 |
| -<script src="//unpkg.com/docsify"></script> |
| 22 | +<!-- Producción --> |
| 23 | +<script src="//cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script> |
14 | 24 |
|
15 |
| -<!-- Or use the compressed files --> |
16 |
| -<script src="//unpkg.com/vue/dist/vue.min.js"></script> |
17 |
| -<script src="//unpkg.com/docsify/lib/docsify.min.js"></script> |
| 25 | +<!-- Desarrollo --> |
| 26 | +<script src="//cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js"></script> |
18 | 27 | ```
|
19 | 28 |
|
20 |
| -Then you can immediately write Vue code at Markdown file. `new Vue({ el: '#main' })` script is executed by default to create instance. |
| 29 | +Una vez que hayas agregado Vue a tu proyecto, podrás utilizar la sintaxis de plantilla de Vue para crear contenido dinámico en tus páginas de Markdown. Esta sintaxis ofrece características útiles como el soporte para expresiones de JavaScript y directivas de Vue para bucles y renderizado condicional. |
21 | 30 |
|
22 |
| -*README.md* |
| 31 | +Por ejemplo, puedes crear elementos condicionales con `v-if`, bucles con `v-for` y utilizar expresiones de JavaScript en tus páginas de Markdown para lograr contenido dinámico. |
23 | 32 |
|
24 |
| -````markdown |
25 |
| -# Vue guide |
| 33 | +Si deseas utilizar datos, propiedades calculadas, métodos y hooks de ciclo de vida de Vue, puedes definirlos en tus páginas de Markdown o en opciones globales. Puedes montar elementos Vue utilizando la sintaxis de plantilla de Vue o creando componentes de Vue personalizados. |
26 | 34 |
|
27 |
| -`v-for` usage. |
| 35 | +Recuerda que Docsify procesa el contenido de Vue en un orden específico en cada carga de página, lo que te permite crear contenido dinámico y reactivo en tu sitio web. Puedes definir datos globales, montar elementos Vue en páginas específicas y crear componentes de Vue personalizados para adaptar la experiencia del usuario. |
28 | 36 |
|
29 |
| -```html |
30 |
| -<ul> |
31 |
| - <li v-for="i in 10">{{ i }}</li> |
32 |
| -</ul> |
| 37 | +### Propiedades calculadas |
| 38 | + |
| 39 | +```js |
| 40 | +{ |
| 41 | + computed: { |
| 42 | + timeOfDay() { |
| 43 | + const date = new Date(); |
| 44 | + const hours = date.getHours(); |
| 45 | + |
| 46 | + if (hours < 12) { |
| 47 | + return 'mañana'; |
| 48 | + } |
| 49 | + else if (hours < 18) { |
| 50 | + return 'tarde'; |
| 51 | + } |
| 52 | + else { |
| 53 | + return 'noche' |
| 54 | + } |
| 55 | + } |
| 56 | + }, |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +```markdown |
| 61 | +¡Buenos {{ timeOfDay }}! |
33 | 62 | ```
|
34 | 63 |
|
35 |
| -<ul> |
36 |
| - <li v-for="i in 10">{{ i }}</li> |
37 |
| -</ul> |
38 |
| -```` |
| 64 | +<output data-lang="output"> |
39 | 65 |
|
40 |
| -You can manually initialize a Vue instance. |
| 66 | +¡Buenos {{ timeOfDay }}! |
41 | 67 |
|
42 |
| -*README.md* |
| 68 | +</output> |
| 69 | + |
| 70 | +### Métodos |
| 71 | + |
| 72 | +```js |
| 73 | +{ |
| 74 | + data() { |
| 75 | + return { |
| 76 | + message: '¡Hola, Mundo!' |
| 77 | + }; |
| 78 | + }, |
| 79 | + methods: { |
| 80 | + hola() { |
| 81 | + alert(this.message); |
| 82 | + } |
| 83 | + }, |
| 84 | +} |
| 85 | +``` |
43 | 86 |
|
44 | 87 | ```markdown
|
45 |
| -# Vue demo |
| 88 | +<button @click="hola">Decir Hola</button> |
| 89 | +``` |
46 | 90 |
|
47 |
| -<div id="main">hello {{ msg }}</div> |
| 91 | +<output data-lang="output"> |
| 92 | + <p><button @click="hola">Decir Hola</button></p> |
| 93 | +</output> |
48 | 94 |
|
49 |
| -<script> |
50 |
| - new Vue({ |
51 |
| - el: '#main', |
52 |
| - data: { msg: 'Vue' } |
53 |
| - }) |
54 |
| -</script> |
| 95 | +### Hooks del ciclo de vida |
| 96 | + |
| 97 | +```js |
| 98 | +{ |
| 99 | + data() { |
| 100 | + return { |
| 101 | + images: null, |
| 102 | + }; |
| 103 | + }, |
| 104 | + created() { |
| 105 | + fetch('https://api.dominio.com/') |
| 106 | + .then(response => response.json()) |
| 107 | + .then(data => (this.images = data)) |
| 108 | + .catch(err => console.log(err)); |
| 109 | + } |
| 110 | +} |
| 111 | + |
| 112 | +// Respuesta de la API: |
| 113 | +// [ |
| 114 | +// { title: 'Imagen 1', url: 'https://dominio.com/1.jpg' }, |
| 115 | +// { title: 'Imagen 2', url: 'https://dominio.com/2.jpg' }, |
| 116 | +// { title: 'Imagen 3', url: 'https://dominio.com/3.jpg' }, |
| 117 | +// ]; |
55 | 118 | ```
|
56 | 119 |
|
57 |
| -!> In a Markdown file, only the script within the first script tag is executed. |
| 120 | +```markdown |
| 121 | +<div style="display: flex;"> |
| 122 | + <figure style="flex: 1;"> |
| 123 | + <img v-for="imagen in images" :src="imagen.url" :title="imagen.title"> |
| 124 | + <figcaption>{{ imagen.title }}</figcaption> |
| 125 | + </figure> |
| 126 | +</div> |
| 127 | +``` |
58 | 128 |
|
59 |
| -## Combine Vuep to write playground |
| 129 | +<output data-lang="output"> |
| 130 | + <div style="display: flex;"> |
| 131 | + <figure v-for="imagen in images" style="flex: 1; text-align: center;"> |
| 132 | + <img :src="imagen.url"> |
| 133 | + <figcaption>{{ imagen.title }}</figcaption> |
| 134 | + </figure> |
| 135 | + </div> |
| 136 | +</output> |
60 | 137 |
|
61 |
| -[Vuep](https://github.com/QingWei-Li/vuep) is a component for rendering Vue components with live editor and preview. Supports Vue component spec and JSX. |
| 138 | +## Opciones globales |
62 | 139 |
|
63 |
| -*index.html* |
| 140 | +Utiliza `vueGlobalOptions` para especificar [opciones de Vue](https://vuejs.org/v2/api/#Options-Data) que se utilizarán con contenido de Vue que no esté montado explícitamente con [vueMounts](#mounts), [vueComponents](#components), o un [script de Markdown](#markdown-script). Los cambios en los datos globales se mantendrán y se reflejarán en cualquier referencia global donde se utilicen. |
64 | 141 |
|
65 |
| -```html |
66 |
| -<!-- Inject css file --> |
67 |
| -<link rel="stylesheet" href="//unpkg.com/vuep/dist/vuep.css"> |
| 142 | +```js |
| 143 | +window.$docsify = { |
| 144 | + vueGlobalOptions: { |
| 145 | + data() { |
| 146 | + return { |
| 147 | + count: 0, |
| 148 | + }; |
| 149 | + }, |
| 150 | + }, |
| 151 | +}; |
| 152 | +``` |
68 | 153 |
|
69 |
| -<!-- Inject javascript file --> |
70 |
| -<script src="//unpkg.com/vue"></script> |
71 |
| -<script src="//unpkg.com/vuep"></script> |
72 |
| -<script src="//unpkg.com/docsify"></script> |
| 154 | +```markdown |
| 155 | +<p> |
| 156 | + <button @click="count -= 1">-</button> |
| 157 | + {{ count }} |
| 158 | + <button @click="count += 1">+</button> |
| 159 | +</p> |
| 160 | +``` |
| 161 | + |
| 162 | +<output data-lang="output"> |
| 163 | + <p> |
| 164 | + <button @click="count -= 1">-</button> |
| 165 | + {{ count }} |
| 166 | + <button @click="count += 1">+</button> |
| 167 | + </p> |
| 168 | +</output> |
| 169 | + |
| 170 | +Observa el comportamiento cuando se representan múltiples contadores globales: |
| 171 | + |
| 172 | +<output data-lang="output"> |
| 173 | + <p> |
| 174 | + <button @click="count -= 1">-</button> |
| 175 | + {{ count }} |
| 176 | + <button @click="count += 1">+</button> |
| 177 | + </p> |
| 178 | +</output> |
73 | 179 |
|
74 |
| -<!-- or use the compressed files --> |
75 |
| -<script src="//unpkg.com/vue/dist/vue.min.js"></script> |
76 |
| -<script src="//unpkg.com/vuep/dist/vuep.min.js"></script> |
77 |
| -<script src="//unpkg.com/docsify/lib/docsify.min.js"></script> |
| 180 | +Los cambios realizados en uno de los contadores afectan a ambos contadores. Esto se debe a que ambas instancias hacen referencia al mismo valor global de `count`. Ahora, navega a una nueva página y vuelve a esta sección para ver cómo los cambios en los datos globales persisten entre las cargas de página. |
| 181 | + |
| 182 | +## Montajes |
| 183 | + |
| 184 | +Utiliza `vueMounts` para especificar elementos del DOM que se montarán como [instancias de Vue](https://vuejs.org/v2/guide/instance.html) y sus opciones asociadas. Los elementos de montaje se especifican mediante un [selector CSS](https://developer.mozilla.org/es/docs/Web/CSS/CSS_Selectors) como clave y un objeto que contiene las opciones de Vue como su valor. Docsify montará el primer elemento coincidente en el área de contenido principal cada vez que se cargue una nueva página. Los datos del elemento montado son únicos para cada instancia y no persistirán a medida que los usuarios naveguen por el sitio. |
| 185 | + |
| 186 | +```js |
| 187 | +window.$docsify = { |
| 188 | + vueMounts: { |
| 189 | + '#counter': { |
| 190 | + data() { |
| 191 | + return { |
| 192 | + count: 0, |
| 193 | + }; |
| 194 | + }, |
| 195 | + }, |
| 196 | + }, |
| 197 | +}; |
78 | 198 | ```
|
79 | 199 |
|
80 |
| -*README.md* |
81 | 200 | ```markdown
|
82 |
| -# Vuep |
| 201 | +<div id="counter"> |
| 202 | + <button @click="count -= 1">-</button> |
| 203 | + {{ count }} |
| 204 | + <button @click="count += 1">+</button> |
| 205 | +</div> |
| 206 | +``` |
83 | 207 |
|
84 |
| -<vuep template="#example"></vuep> |
| 208 | +<output id="counter"> |
| 209 | + <button @click="count -= 1">-</button> |
| 210 | + {{ count }} |
| 211 | + <button @click="count += 1">+</button> |
| 212 | +</output> |
85 | 213 |
|
86 |
| -<script v-pre type="text/x-template" id="example"> |
87 |
| - <template> |
88 |
| - <div>Hello, {{ name }}!</div> |
89 |
| - </template> |
| 214 | +## Componentes |
90 | 215 |
|
91 |
| - <script> |
92 |
| - module.exports = { |
93 |
| - data: function () { |
94 |
| - return { name: 'Vue' } |
95 |
| - } |
96 |
| - } |
97 |
| - </script> |
| 216 | +Utiliza `vueComponents` para crear y registrar [componentes Vue](https://vuejs.org/v2/guide/components.html) globales. Los componentes se especifican utilizando el nombre del componente como clave y un objeto que contiene las opciones de Vue como valor. Los datos del componente son únicos para cada instancia y no persistirán a medida que los usuarios naveguen por el sitio. |
| 217 | + |
| 218 | +```js |
| 219 | +window.$docsify = { |
| 220 | + vueComponents: { |
| 221 | + 'contador-de-botones': { |
| 222 | + template: ` |
| 223 | + <button @click="count += 1"> |
| 224 | + Me has clicado {{ count }} veces |
| 225 | + </button> |
| 226 | + `, |
| 227 | + data() { |
| 228 | + return { |
| 229 | + count: 0, |
| 230 | + }; |
| 231 | + }, |
| 232 | + }, |
| 233 | + }, |
| 234 | +}; |
| 235 | +``` |
| 236 | + |
| 237 | +```markdown |
| 238 | +<contador-de-botones></contador-de-botones> |
| 239 | +<contador-de-botones></contador-de-botones> |
| 240 | +``` |
| 241 | + |
| 242 | +<output data-lang="output"> |
| 243 | + <contador-de-botones></contador-de-botones> |
| 244 | + <contador-de-botones></contador-de-botones> |
| 245 | +</output> |
| 246 | + |
| 247 | +## Script de Markdown |
| 248 | + |
| 249 | +El contenido de Vue se puede montar usando una etiqueta `<script>` en tus páginas de Markdown. |
| 250 | + |
| 251 | +!> Solo se ejecuta la primera etiqueta `<script>` en un archivo Markdown. Si deseas montar múltiples instancias de Vue utilizando una etiqueta script, todas las instancias deben montarse dentro de la primera etiqueta `<script>` en tu archivo Markdown. |
| 252 | + |
| 253 | +```html |
| 254 | +<!-- Vue 2.x --> |
| 255 | +<script> |
| 256 | + new Vue({ |
| 257 | + el: '#ejemplo', |
| 258 | + // Opciones... |
| 259 | + }); |
98 | 260 | </script>
|
99 | 261 | ```
|
100 | 262 |
|
101 |
| -?> Example Refer to the [Vuep documentation](https://qingwei-li.github.io/vuep/). |
| 263 | +```html |
| 264 | +<!-- Vue 3.x --> |
| 265 | +<script> |
| 266 | + Vue.createApp({ |
| 267 | + // Opciones... |
| 268 | + }).mount('#ejemplo'); |
| 269 | +</script> |
| 270 | +``` |
| 271 | + |
| 272 | +## Notas técnicas |
| 273 | + |
| 274 | +- Docsify procesa el contenido de Vue en el siguiente orden en cada carga de página: |
| 275 | + 1. Ejecutar el markdown `<script>` |
| 276 | + 1. Registrar `vueComponents` globales |
| 277 | + 1. Montar `vueMounts` |
| 278 | + 1. Montar automáticamente componentes de Vue no montados |
| 279 | + 1. Montar automáticamente la sintaxis de plantilla de Vue no montada utilizando `vueGlobalOptions` |
| 280 | +- Al montar automáticamente contenido de Vue, Docsify montará cada elemento de nivel superior en tu markdown que contiene sintaxis de plantilla o un componente. Por ejemplo, en el siguiente HTML, se montarán los elementos de nivel superior `<p>`, `<mi-componente />` y `<div>`. |
| 281 | + ```html |
| 282 | + <p>{{ foo }}</p> |
| 283 | + <mi-componente /> |
| 284 | + <div> |
| 285 | + <span>{{ bar }}</span> |
| 286 | + <otro-componente /> |
| 287 | + </div> |
| 288 | + ``` |
| 289 | +- Docsify no montará una instancia de Vue existente ni un elemento que contenga una instancia de Vue existente. |
| 290 | +- Docsify destruirá/desmontará automáticamente todas las instancias de Vue que crea antes de cada carga de página. |
0 commit comments