<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
		<id>http://wikiserver.infomerce.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mfernandez</id>
		<title>wikiserver - Contribucions de l’usuari [ca]</title>
		<link rel="self" type="application/atom+xml" href="http://wikiserver.infomerce.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mfernandez"/>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php/Especial:Contribucions/Mfernandez"/>
		<updated>2026-05-09T14:25:44Z</updated>
		<subtitle>Contribucions de l’usuari</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_Esdeveniments_i_Validacio_de_formularis&amp;diff=19168</id>
		<title>NF1 - Esdeveniments i Validacio de formularis</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_Esdeveniments_i_Validacio_de_formularis&amp;diff=19168"/>
				<updated>2025-12-04T12:41:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Mostrar / Ocultar text */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esdeveniments =&lt;br /&gt;
Fins ara, totes les aplicacions i scripts que s'han creat tenen alguna cosa en comú: s'executen des de la primera instrucció fins a l'última de forma seqüencial. Gràcies a les estructures de control de flux (if, for, while) és possible modificar lleugerament aquest comportament i repetir alguns trossos del script i saltar-se altres trossos en funció d'algunes condicions.&lt;br /&gt;
&lt;br /&gt;
Aquest tipus d'aplicacions són poc útils, ja que no interactuen amb els usuaris i no poden respondre als diferents esdeveniments que es produeixen durant l'execució d'una aplicació. Afortunadament, les aplicacions web creades amb el llenguatge Javascript poden utilitzar el model de programació basada en esdeveniments.&lt;br /&gt;
&lt;br /&gt;
En aquest tipus de programació, els scripts es dediquen a esperar al fet que l'usuari &amp;quot;faci alguna cosa&amp;quot; (que premi una tecla, que mogui el ratolí, que tanqui la finestra del navegador). A continuació, el script respon a l'acció de l'usuari normalment processant aquesta informació i generant un resultat.&lt;br /&gt;
&lt;br /&gt;
Els esdeveniments fan possible que els usuaris transmetin informació als programes. Javascript defineix nombrosos esdeveniments que permeten una interacció completa entre l'usuari i les pàgines/aplicacions web. La pulsació d'una tecla constitueix un esdeveniment, així com punxar o moure el ratolí, seleccionar un element d'un formulari, redimensionar la finestra del navegador, etc.&lt;br /&gt;
&lt;br /&gt;
Javascript permet assignar una funció a cadascun dels esdeveniments. D'aquesta forma, quan es produeix qualsevol esdeveniment, Javascript executa la seva funció associada. Aquest tipus de funcions es denominen &amp;quot;event handlers&amp;quot; en anglès i solen traduir-se per &amp;quot;manegadors d'esdeveniments&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Model bàsic d'esdeveniments ==&lt;br /&gt;
=== Tipus d'esdeveniments ===&lt;br /&gt;
En aquest model, cada element o etiqueta XHTML defineix la seva pròpia llista de possibles esdeveniments que se li poden assignar. Un mateix tipus d'esdeveniment (per exemple, clicar el botó esquerre del ratolí) pot estar definit per a diversos elements XHTML diferents i un mateix element XHTML pot tenir associats varis esdeveniments diferents.&lt;br /&gt;
&lt;br /&gt;
El nom de cada esdeveniment es construeix mitjançant el prefix ''on'', seguit del nom en anglès de l'acció associada a l'esdeveniment. Així, l'esdeveniment de punxar un element amb el ratolí es denomina ''onclick'' i l'esdeveniment associat a l'acció de moure el ratolí es denomina ''onmousemove''.&lt;br /&gt;
&lt;br /&gt;
La següent taula resumeix els esdeveniments més importants definits per Javascript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Event&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Descripció&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elements per els que está definit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onblur&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Deseleccionar l'element (el contrari de onfocus)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;button&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;input&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;select&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;textarea&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onchange&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Succeeix quan el valor del element ha canviat&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;input&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;select&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;textarea&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onclick&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;clicar i deixar anar el ratolí&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ondblclick&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;clicar dos vegades seguides amb el ratolí&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onfocus&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Seleccionar un element&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;button&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;input&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;select&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;textarea&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onkeydown&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Prémer una tecla (sense deixar-la anar)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Elements de formulari i &amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onkeypress&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Prémer una tecla&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Elements de formulari i &amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onkeyup&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Deixar anar una tecla premuda&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Elements de formulari i &amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;La pàgina s'ha carregat completament&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onmousedown&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Prémer (sense deixar anar) un botn del ratolí&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onmousemove&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Moure el ratolí&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onmouseout&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;El ratolí &amp;lt;em&amp;gt;&amp;quot;surt&amp;quot;&amp;lt;/em&amp;gt; de l'element (passa sobre un altre element)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onmouseover&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;El ratoli &amp;lt;em&amp;gt;&amp;quot;entra&amp;quot;&amp;lt;/em&amp;gt; dintre de l'elemento (passa per sobre de l'element)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onmouseup&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Deixar anar el botó que estava premut en el ratolí&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tots els elements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onreset&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Inicialitzar el formulari (esborrar totes les dades)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onresize&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;S'ha modificat la mida de la finestra del navegador&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onselect&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Seleccionar un text&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;input&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;textarea&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onsubmit&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Enviar el formulari&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;form&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;onunload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;S'abandona la pàgina (per exemple al tancar el navegador)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podeu veure tots el esdeveniments [[http://www.w3schools.com/jsref/dom_obj_event.asp aquí]]&lt;br /&gt;
&lt;br /&gt;
===Gestor  d'esdeveniments===&lt;br /&gt;
&lt;br /&gt;
Un esdeveniment de Javascript per si mateix manca d'utilitat. Perquè els esdeveniments resultin útils, s'han d'associar funcions o codi Javascript a cada esdeveniment. D'aquesta forma, quan es produeix un esdeveniment s'executa el codi indicat, per la qual cosa l'aplicació pot respondre davant qualsevol esdeveniment que es produeixi durant la seva execució.&lt;br /&gt;
&lt;br /&gt;
Les funcions o codi Javascript que es defineixen per a cada esdeveniment es denominen &amp;quot;manegador d'esdeveniments&amp;quot; i com Javascript és un llenguatge molt flexible, existeixen diverses formes diferents d'indicar els manegadors:&lt;br /&gt;
&lt;br /&gt;
*Manejadores com a atributs dels elements XHTML.&lt;br /&gt;
*Manejadores com a funcions Javascript externes.&lt;br /&gt;
*Manejadores &amp;quot;semàntics&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Gestor d'esdeveniments com a atributs XHTML ====&lt;br /&gt;
&lt;br /&gt;
Es tracta del mètode més senzill i alhora menys professional d'indicar el codi Javascript que s'ha d'executar quan es produeixi un esdeveniment. En aquest cas, el codi s'inclou en un atribut del propi element XHTML. En el següent exemple, es vol mostrar un missatge quan l'usuari cliqui amb el ratolí sobre un botó:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;clica i veuràs&amp;quot; onclick=&amp;quot;alert('Gràcies per clicar');&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En aquest mètode, es defineixen atributs XHTML amb el mateix nom que els esdeveniments que es volen manejar. L'exemple anterior només vol controlar l'esdeveniment de clicar amb el ratolí, el nom del qual és onclick. Així, l'element XHTML pel qual es vol definir aquest esdeveniment, ha d'incloure un atribut anomenat onclick.&lt;br /&gt;
&lt;br /&gt;
El contingut de l'atribut és una cadena de text que conté totes les instruccions Javascript que s'executen quan es produeix l'esdeveniment. En aquest cas, el codi Javascript és molt senzill (alert('Gràcies per clicar');), ja que solament es tracta de mostrar un missatge.&lt;br /&gt;
&lt;br /&gt;
En aquest altre exemple, quan l'usuari punxa sobre l'element &amp;lt;div&amp;gt; es mostra un missatge i quan l'usuari passa el ratolí per sobre de l'element, es mostra un altre missatge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div onclick=&amp;quot;alert('Has clicat amb el ratolí');&amp;quot; onmouseover=&amp;quot;alert('Acabes de passar el ratolí per damunt');&amp;quot;&amp;gt;Ratolí&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pots clicar sobre aquest element o simplement passar el ratolí per damunt.&lt;br /&gt;
Aquest altre exemple inclou una de les instruccions més utilitzades en les aplicacions Javascript més antigues:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body onload=&amp;quot;alert(&amp;quot;La pàgina s'ha carregat completament &amp;quot;);&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El missatge anterior es mostra després que la pàgina s'hagi carregat completament, és a dir, després que s'hagi descarregat el seu codi HTML, les seves imatges i qualsevol altre objecte inclòs a la pàgina.&lt;br /&gt;
&lt;br /&gt;
L'esdeveniment onload és un dels més utilitzats ja que, com veurem en el capítol de DOM, les funcions que permeten accedir i manipular els nodes de l'arbre DOM solament estan disponibles quan la pàgina s'ha carregat completament.&lt;br /&gt;
&lt;br /&gt;
==== Gestor d'esdeveniments i variable this ====&lt;br /&gt;
&lt;br /&gt;
En els esdeveniments, es pot utilitzar la variable '''this''' per referir-se a l'element XHTML que ha provocat l'esdeveniment. Aquesta variable és molt útil per a exemples com el següent:&lt;br /&gt;
&lt;br /&gt;
Quan l'usuari passa el ratolí per sobre de el &amp;lt;div&amp;gt;, el color de la vora es mostra de color negre. Quan el ratolí surt de el &amp;lt;div&amp;gt;, es torna a mostrar la vora amb el color gris clar original.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Element &amp;lt;div&amp;gt; original:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;continguts&amp;quot; style=&amp;quot;width:150px; height:60px; border:thin solid silver&amp;quot;&amp;gt;&lt;br /&gt;
Secció de continguts...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si no s'utilitza la variable this, el codi necessari per modificar el color de les vores, seria el següent:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;continguts&amp;quot; style=&amp;quot;width:150px; height:60px; border:thin solid silver&amp;quot; onmouseover=&amp;quot;document.getElementById('continguts').style.borderColor='black';&amp;quot; onmouseout=&amp;quot;document.getElementById('continguts').style.borderColor='silver';&amp;quot;&amp;gt;&lt;br /&gt;
Secció de continguts...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El codi anterior és massa llarg i massa propens a cometre errors. Dins del codi d'un esdeveniment, Javascript crea automàticament la variable this, que fa referència a l'element XHTML que ha provocat l'esdeveniment. Així, l'exemple anterior es pot reescriure de la següent manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;continguts&amp;quot; style=&amp;quot;width:150px; height:60px; border:thin solid silver&amp;quot; onmouseover=&amp;quot;this.style.borderColor='black';&amp;quot; onmouseout=&amp;quot;this.style.borderColor='silver';&amp;quot;&amp;gt;&lt;br /&gt;
Secció de continguts...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El codi anterior és molt més compacte, més fàcil de llegir i d'escriure i segueix funcionant correctament encara que es modifiqui el valor de l'atribut ''id'' de el &amp;lt; div &amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Gestor d'esdeveniments com a funcions externes ====&lt;br /&gt;
&lt;br /&gt;
La definició dels manegadores d'esdeveniments en els atributs XHTML és el mètode més senzill però menys aconsellable de tractar amb els esdeveniments en Javascript. El principal inconvenient és que es complica a l'excés quan s'afegeixen algunes poques instruccions, per la qual cosa solament és recomanable per als casos més senzills.&lt;br /&gt;
&lt;br /&gt;
Si es realitzen aplicacions complexes, com per exemple la validació d'un formulari, és aconsellable agrupar tot el codi Javascript en una funció externa i cridar a aquesta funció des de l'element XHTML.&lt;br /&gt;
&lt;br /&gt;
Seguint amb l'exemple anterior que mostra un missatge en clicar sobre un botó:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Clica i veuràs&amp;quot; onclick=&amp;quot;alert('Gràcies per clicar');&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilitzant funcions externes es pot transformar en:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function mostraMissatge() {&lt;br /&gt;
  alert('Gràcies per clicar');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Clica i veuràs&amp;quot; onclick=&amp;quot;mostraMissatge()&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquesta tècnica consisteix a extreure totes les instruccions de Javascript i agrupar-les en una funció externa. Una vegada definida la funció, en l'atribut de l'element XHTML s'inclou el nom de la funció, per indicar que és la funció que s'executa quan es produeix l'esdeveniment.&lt;br /&gt;
&lt;br /&gt;
La crida a la funció es realitza de la forma habitual, indicant el seu nom seguit dels parèntesis i de forma opcional, incloent tots els arguments i paràmetres que es necessitin.&lt;br /&gt;
&lt;br /&gt;
El principal inconvenient d'aquest mètode és que en les funcions externes no es pot seguir utilitzant la variable '''this''' i per tant, és necessari passar aquesta variable com a paràmetre a la funció:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function ressalta(element) {&lt;br /&gt;
	switch(element.style.borderColor) {&lt;br /&gt;
		case 'silver':&lt;br /&gt;
		case 'silver silver silver silver':&lt;br /&gt;
		case '#c0c0c0':&lt;br /&gt;
			element.style.borderColor = 'black';&lt;br /&gt;
			break;&lt;br /&gt;
		case 'black':&lt;br /&gt;
		case 'black black black black':&lt;br /&gt;
		case '#000000':&lt;br /&gt;
			element.style.borderColor = 'silver';&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:150px; height:60px; border:thin solid silver&amp;quot; onmouseover=&amp;quot;ressalta(this)&amp;quot; onmouseout=&amp;quot;ressalta(this)&amp;quot;&amp;gt;&lt;br /&gt;
Secció de continguts...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En l'exemple anterior, la funció externa és cridada amb el paràmetre ''this'', que dins de la funció es denomina element. La complexitat de l'exemple es produeix sobretot per la forma en la qual els diferents navegadors emmagatzemen el valor de la propietat *&lt;br /&gt;
''borderColor''.&lt;br /&gt;
&lt;br /&gt;
Mentre que Firefox emmagatzema (en cas que les quatre vores coincideixin en color) el valor ''black'', Internet Explorer ho emmagatzema com ''black black black black'' i Opera emmagatzema la seva representació hexadecimal ''#000000''.&lt;br /&gt;
&lt;br /&gt;
====Gestor d'esdeveniments semàntics====&lt;br /&gt;
Els mètodes que s'han vist per afegir manejadores d'esdeveniments (com a atributs XHTML i com a funcions externes) tenen un greu inconvenient: &amp;quot;embruten&amp;quot; el codi XHTML de la pàgina.&lt;br /&gt;
&lt;br /&gt;
Com és conegut, una de les bones pràctiques bàsiques en el disseny de pàgines i aplicacions web és la separació dels continguts (XHTML) i el seu aspecte o presentació (CSS). Sempre que sigui possible, també es recomana separar els continguts (XHTML) i el seu comportament o programació (Javascript).&lt;br /&gt;
&lt;br /&gt;
Barrejar el codi Javascript amb els elements XHTML solament contribueix a complicar el codi font de la pàgina, a dificultar la modificació i manteniment de la pàgina i a reduir la semàntica del document final produït.&lt;br /&gt;
&lt;br /&gt;
Afortunadament, existeix un mètode alternatiu per definir els manegadores d'esdeveniments de Javascript. Aquesta tècnica és una evolució del mètode de les funcions externes, ja que es basa a utilitzar les propietats DOM dels elements XHTML per assignar totes les funcions externes que actuen de manejadores d'esdeveniments. Així, el següent exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;clica&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;Clica i veuràs&amp;quot; onclick=&amp;quot;alert('Gràcies per clicar');&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Es pot transformar en:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Funció externa&lt;br /&gt;
function mostraMissatge() {&lt;br /&gt;
alert('Gràcies per clicar');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Assignar la funció externa a l'element&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = mostraMissatge;&lt;br /&gt;
&lt;br /&gt;
// Element XHTML&lt;br /&gt;
&amp;lt;input id=&amp;quot;clica&amp;quot; type=&amp;quot;button&amp;quot; value=&amp;quot;Clica i veuràs&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La tècnica dels manegadores semàntics consisteix en:&lt;br /&gt;
&lt;br /&gt;
*Assignar un identificador únic a l'element XHTML mitjançant l'atribut ''id''.&lt;br /&gt;
*Crear una funció de Javascript encarregada de manejar l'esdeveniment.&lt;br /&gt;
*Assignar la funció externa a l'esdeveniment corresponent en l'element desitjat.&lt;br /&gt;
*L'últim pas és la clau d'aquesta tècnica. En primer lloc, s'obté l'element al que es desitja associar la funció externa:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A continuació, s'utilitza una propietat de l'element amb el mateix nom que l'esdeveniment que es vol manejar. En aquest cas, la propietat és ''onclick'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'assigna la funció externa mitjançant el seu nom sense parèntesi. El més important (i la causa més comuna d'errors) és indicar solament el nom de la funció, és a dir, prescindir dels parèntesis en assignar la funció:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = mostraMissatge;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si s'afegeixen els parèntesis després del nom de la funció, en realitat s'està executant la funció i guardant el valor retornat per la funció en la propietat onclick d'element.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Assignar una funció externa a un esdeveniment d'un element&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = mostraMissatge;&lt;br /&gt;
&lt;br /&gt;
// Executar una funció i guardar el seu resultat en una propietat d'un element&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = mostraMissatge();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El gran avantatge d'aquest mètode és que el codi XHTML resultant és molt &amp;quot;net&amp;quot;, ja que no es barreja amb el codi Javascript. A més, dins de les funcions externes assignades sí que es pot utilitzar la variable '''this''' per referir-se a l'element que provoca l'esdeveniment.&lt;br /&gt;
&lt;br /&gt;
L'únic inconvenient d'aquest mètode és que la pàgina s'ha de carregar completament abans que es puguin utilitzar les funcions DOM que assignen els manegadors als elements XHTML. Una de les formes més senzilles d'assegurar que cert codi es va a executar després que la pàgina es carregui per complet és utilitzar l'esdeveniment '''onload''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
document.getElementById(&amp;quot;clica&amp;quot;).onclick = muestraMensaje;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Gestor d'esdeveniments amb DOM====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El mètode addEventListener ens permet incloure un gestor d'esdeveniment. La sintaxi de addEventListener és la següent:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
element_que_escolta.addEventListener('event',funció_a_llançar, booleà);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''element_que_escolta'' - és qualsevol element present en un document al qual es vol associar l'esdeveniment.&lt;br /&gt;
&lt;br /&gt;
''esdeveniment'' - és el succés ocorregut sobre l'element (clic, load, ...).&lt;br /&gt;
&lt;br /&gt;
''funció_a_llançar'' - és qualsevol funció definida que vulguem que s'executi quan passi l'esdeveniment.&lt;br /&gt;
&lt;br /&gt;
''booleà'' - és un valor que defineix l'ordre del flux d'esdeveniments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si es vol escoltar un esdeveniment només una vegada i després eliminar-ho s'ha d'utilitzar el mètode removeEventListener:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
element_que_escolta.removeEventListener ('esdeveniment',funció_a_llançar, booleà);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTA 1:'' Explicació del paràmetre booleà del mètode addEventListener amb un exemple.&lt;br /&gt;
Suposem que tenim això:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html onclick=&amp;quot;processaEvent()&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Exemple de fluix events&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onclick=&amp;quot;processaEvent()&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div onclick=&amp;quot;processaEvent()&amp;quot;&amp;gt;Clica aqui&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quan fem clic al div no només ho estem fent sobre ell, sinó sobre els elements que el contenen en l'arbre del DOM, és a dir, hem fet clic a més sobre l'element html i sobre l'element body. Sí només hi ha una funció assignada a una escolta per al div no hi ha major problema, però si a més hi ha una per al html i una altra per al body, quin és l'ordre en què s'han de llançar les tres funcions?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per contestar a aquesta pregunta hi ha un model de comportament, el flux d'esdeveniments (anglès). Segons aquest, quan es fa clic sobre un element, l'esdeveniment es propaga en dues fases, una que és la captura -el esdeveniment comença en el nivell superior del document i recorre els elements de pares a fills- i l'altra la bombolla -el ordre invers, ascendint de fills a pares-.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un cop vist això, podem comprendre el tercer paràmetre de addEventListener, que el que fa és permetre'ns escollir l'ordre de propagació:&lt;br /&gt;
&lt;br /&gt;
'''true''': El flux d'esdeveniments és com el representat, i la fase de captura passa en llançar l'esdeveniment. L'ordre de propagació per l'exemple seria, per tant, l'indicat, ''html-body-div.''&lt;br /&gt;
&lt;br /&gt;
'''false''': Permet saltar la fase de captura, i la propagació seguiria només la bombolla. Així, l'ordre seria ''div-body-html.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTA 2:'' A internet explorer no funciona en les versions anteriors a la 7 (inclosa).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        function alerta(){&lt;br /&gt;
            alert(this);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        window.onload = function (){&lt;br /&gt;
            var elBody = document.getElementsByTagName('body')[0];&lt;br /&gt;
            var elDiv = document.getElementById('elDiv');&lt;br /&gt;
            var elButton = document.getElementById('elButton');&lt;br /&gt;
         &lt;br /&gt;
            elBody.addEventListener('click',alerta,false);&lt;br /&gt;
            elDiv.addEventListener('click',alerta,false);&lt;br /&gt;
            elButton.addEventListener('click',alerta,false);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//event.stopPropagation();   //evita propagarse el evento en forma de burbuja&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body id=&amp;quot;body&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;elDiv&amp;quot;&amp;gt;Clica aqui&lt;br /&gt;
          &amp;lt;button id=&amp;quot;elButton&amp;quot;&amp;gt;boton&amp;lt;/button&amp;gt;&lt;br /&gt;
     &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització manejadores d'esdeveniments amb DOM:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function muestraMensaje() {&lt;br /&gt;
  				console.log(&amp;quot;Has pulsado el ratón&amp;quot;);&lt;br /&gt;
  				elDiv.removeEventListener(&amp;quot;click&amp;quot;, muestraMensaje, false);  // borra el evento asociado de tipo click a ese elemento.&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			var elDiv = document.getElementById(&amp;quot;div_principal&amp;quot;);&lt;br /&gt;
			elDiv.addEventListener(&amp;quot;click&amp;quot;, muestraMensaje, false);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
En el caso que no queramos que se aplique el evento de tipo de Submit o Hipervínculo &amp;quot;&amp;lt;a&amp;gt;&amp;lt;/a&amp;gt;&amp;quot; al ser botón usaremos &amp;quot;e.preventDefault()&amp;quot; y realizará las acciones que tengamos establecidas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
window.addEventListener(&amp;quot;load&amp;quot;,ejemplo); // window.onload= ejemplo;&lt;br /&gt;
&lt;br /&gt;
	function ejemplo(){&lt;br /&gt;
			function muestraMensaje(e) {&lt;br /&gt;
  				console.log(&amp;quot;Has pulsado el ratón&amp;quot;);&lt;br /&gt;
                                e.preventDefault();  //evita que se ejecute el submit y recargue la página&lt;br /&gt;
			}&lt;br /&gt;
         document.getElementById(&amp;quot;boton&amp;quot;).addEventListener(&amp;quot;click&amp;quot;, muestraMensaje, false);&lt;br /&gt;
	}      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form action=&amp;quot;./index.html&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;submit&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;boton&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el següent exemple, s'afegeixen esdeveniments als elements de tipus ''input=text'' d'un formulari complex:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;formulario&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;hola&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;holaa&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    function resalta() {&lt;br /&gt;
        console.log(&amp;quot;holaa&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    window.onload = function() {&lt;br /&gt;
        var formulario = document.getElementById(&amp;quot;formulario&amp;quot;);&lt;br /&gt;
        var camposInput = formulario.getElementsByTagName(&amp;quot;input&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        for(var i=0; i&amp;lt;camposInput.length; i++) {&lt;br /&gt;
            if(camposInput[i].type == &amp;quot;text&amp;quot;) {&lt;br /&gt;
                camposInput[i].onclick = resalta;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Alert ===&lt;br /&gt;
Volem provar els events de la pàgina, per fer-ho posa un alert amb un missatge en els següents casos:&lt;br /&gt;
* Al carregar-se completament la pàgina.&lt;br /&gt;
* Al clicar en un botó&lt;br /&gt;
* Al passar damunt d'un paràgraf&lt;br /&gt;
* Al passar damunt d'una imatge&lt;br /&gt;
* Al sortir del damunt d'una imatge&lt;br /&gt;
* Al clicar en un enllaç&lt;br /&gt;
&lt;br /&gt;
:[[Exercici1 Events]]&lt;br /&gt;
&lt;br /&gt;
=== Desplegable ===&lt;br /&gt;
Es vol disposar de un menu desplegable on cada element del desplegable sigui el nom de la pàgina a la cual fa referència. Quan es seleccioni una entrada del desplegable, el navegador canvia la seva url per la del desplegable.&lt;br /&gt;
&lt;br /&gt;
:[[Exercici 2 Events]]&lt;br /&gt;
&lt;br /&gt;
=== Rollover ===&lt;br /&gt;
Un intercanvi d'imatge és una cosa grandiosa. L'usuari aproxima el punter del ratolí a una imatge i aquesta canvia a una altre imatge. Quan l'usuari abandona la imatge, torna a canviar a la imatge anterior. &lt;br /&gt;
Fes un programa amb javascript que reprodueixi el comportament anterior.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[Exercici 3 Events]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Mostrar / Ocultar text ===&lt;br /&gt;
Donada la següent pàgina&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	function muestraOculta() {&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p id=&amp;quot;contenidos_1&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis. Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede. Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor, pede. Nullam sit amet nisl elementum elit convallis malesuada. Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis pellentesque, felis eu adipiscing ullamcorper, odio urna consequat arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis scelerisque.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;a id=&amp;quot;enlace_1&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Ocultar contenidos&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p id=&amp;quot;contenidos_2&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis. Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede. Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor, pede. Nullam sit amet nisl elementum elit convallis malesuada. Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis pellentesque, felis eu adipiscing ullamcorper, odio urna consequat arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis scelerisque.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;a id=&amp;quot;enlace_2&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Ocultar contenidos&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p id=&amp;quot;contenidos_3&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis. Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede. Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor, pede. Nullam sit amet nisl elementum elit convallis malesuada. Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis pellentesque, felis eu adipiscing ullamcorper, odio urna consequat arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis scelerisque.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;a id=&amp;quot;enlace_3&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Ocultar contenidos&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Realitza els següents apartats:&lt;br /&gt;
*Quan es cliqui sobre el primer enllaç, s'oculti la seva secció relacionada&lt;br /&gt;
*Quan es torni a clicar sobre el mateix enllaç, es mostri una altra vegada aquesta secció de continguts&lt;br /&gt;
*Completar la resta d'enllaços de la pàgina perquè el seu comportament sigui idèntic al del primer enllaç&lt;br /&gt;
*Quan una secció s'oculti, ha de canviar el missatge de l'enllaç associat (pista: propietat innerHTML)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[Exercici 4 Events]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenint informació de l'esdeveniment (objecte event)==&lt;br /&gt;
Normalment, els manegadors d'esdeveniments requereixen informació addicional per processar les seves tasques. Si una funció per exemple s'encarrega de processar l'esdeveniment onclick, potser necessiti saber que posició estava el ratolí en el moment de punxar el botó.&lt;br /&gt;
&lt;br /&gt;
No obstant això, el cas més habitual en el qual és necessari conèixer informació addicional sobre l'esdeveniment és el dels esdeveniments associats al teclat. Normalment, és molt important conèixer la tecla que s'ha premut, per exemple per diferenciar les tecles normals de les tecles especials (ENTER, tabulador, Alt, Ctrl., etc.).&lt;br /&gt;
&lt;br /&gt;
Javascript permet obtenir informació sobre el ratolí i el teclat mitjançant un objecte especial anomenat ''event''. Desafortunadament, els diferents navegadors presenten diferències molt notables en el tractament de la informació sobre els esdeveniments.&lt;br /&gt;
&lt;br /&gt;
La principal diferència resideix en la forma en la qual s'obté l'objecte event. Internet Explorer considera que aquest objecte forma part de l'objecte window i la resta de navegadors ho consideren com l'únic argument que tenen les funcions manejadoras d'esdeveniments.&lt;br /&gt;
&lt;br /&gt;
Encara que és un comportament que resulta molt estrany al principi, tots els navegadors moderns excepte Internet Explorer creen màgicament i de forma automàtica un argument que es passa a la funció manegadora, per la qual cosa no és necessari incloure-ho en la trucada a la funció manegadora. D'aquesta forma, per utilitzar aquest &amp;quot;argument màgic&amp;quot;, només és necessari assignar-li un nom, ja que els navegadors ho creen automàticament.&lt;br /&gt;
&lt;br /&gt;
En resum, en els navegadors tipus Internet Explorer, l'objecte event s'obté directament mitjançant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var esdeveniment = window.event;&lt;br /&gt;
D'altra banda, en la resta de navegadors, l'objecte event s'obté màgicament a partir de l'argument que el navegador crea automàticament:&lt;br /&gt;
&lt;br /&gt;
function manejadorEventos(elEvento) {&lt;br /&gt;
var esdeveniment = elEvento;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si es vol programar una aplicació que funcioni correctament en tots els navegadors, és necessari obtenir l'objecte event de forma correcta segons cada navegador. El següent codi mostra la forma correcta d'obtenir l'objecte event en qualsevol navegador:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function manejadorEventos(elEvento) {&lt;br /&gt;
var esdeveniment = elEvento || window.event;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Una vegada obtingut l'objecte event, ja es pot accedir a tota la informació relacionada amb l'esdeveniment, que depèn del tipus d'esdeveniment produït.&lt;br /&gt;
&lt;br /&gt;
=== Informació sobre l'esdeveniment ===&lt;br /&gt;
La propietat '''type''' indica el tipus d'esdeveniment produït, la qual cosa és útil quan una mateixa funció s'utilitza per manejar diversos esdeveniments:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var tipus = esdeveniment.type;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La propietat type retorna el tipus d'esdeveniment produït, que és igual al nom de l'esdeveniment però sense el prefix '''on'''.&lt;br /&gt;
&lt;br /&gt;
Mitjançant aquesta propietat, es pot refer de forma més senzilla l'exemple anterior en el qual es ressaltava una secció de continguts en passar el ratolí per damunt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function ressalta(elEvento) {&lt;br /&gt;
    var esdeveniment = elEvento || window.event;&lt;br /&gt;
    switch(esdeveniment.type) {&lt;br /&gt;
         case 'mouseover':&lt;br /&gt;
               this.style.borderColor = 'black';&lt;br /&gt;
               break;&lt;br /&gt;
         case 'mouseout':&lt;br /&gt;
               this.style.borderColor = 'silver';&lt;br /&gt;
               break;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
       document.getElementById(&amp;quot;seccion&amp;quot;).onmouseover = ressalta;&lt;br /&gt;
       document.getElementById(&amp;quot;seccion&amp;quot;).onmouseout = ressalta;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;div id=&amp;quot;seccion&amp;quot; style=&amp;quot;width:150px; height:60px; border:thin solid silver&amp;quot;&amp;gt;&lt;br /&gt;
  Secció de continguts...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Informació sobre els esdeveniments de teclat ===&lt;br /&gt;
De tots els esdeveniments disponibles en Javascript, els esdeveniments relacionats amb el teclat són els més incompatibles entre diferents navegadors i per tant, els més difícils de manegar. En primer lloc, existeixen moltes diferències entre els navegadors, els teclats i els sistemes operatius dels usuaris, principalment a causa de les diferències entre idiomes.&lt;br /&gt;
&lt;br /&gt;
A més, existeixen tres esdeveniments diferents per a les pulsacions de les tecles ('''onkeyup''', '''onkeypress''' i '''onkeydown'''). Finalment, existeixen dos tipus de tecles: les tecles normals (com a lletres, nombres i símbols normals) i les tecles especials (com ENTER, Alt, Shift, etc.)&lt;br /&gt;
&lt;br /&gt;
Quan un usuari prem una tecla normal, es produeixen tres esdeveniments seguits i en aquest ordre: &lt;br /&gt;
*'''onkeydown''', &lt;br /&gt;
*'''onkeypress''' i &lt;br /&gt;
*'''onkeyup'''. &lt;br /&gt;
L'esdeveniment '''onkeydown''' es correspon amb el fet de prémer una tecla i no deixar-la anar; l'esdeveniment '''onkeypress''' és la pròpia pulsació de la tecla i l'esdeveniment '''onkeyup''' fa referència al fet de deixar anar una tecla que estava premuda.&lt;br /&gt;
&lt;br /&gt;
La forma més senzilla d'obtenir la informació sobre la tecla que s'ha premut és mitjançant l'esdeveniment '''onkeypress'''. La informació que proporcionen els esdeveniments '''onkeydown''' i '''onkeyup''' es pot considerar com més tècnica, ja que retornen el ''codi intern'' de cada tecla i no el caràcter que s'ha premut.&lt;br /&gt;
&lt;br /&gt;
A continuació s'inclou una llista amb totes les propietats diferents de tots els esdeveniments de teclat tant en Internet Explorer com en la resta de navegadors:&lt;br /&gt;
&lt;br /&gt;
*Esdeveniment keydown:&lt;br /&gt;
**Mateix comportament en tots els navegadors:&lt;br /&gt;
***Propietat keyCode: codi intern de la tecla&lt;br /&gt;
***Propietat charCode: no definit&lt;br /&gt;
*Esdeveniment keypress:&lt;br /&gt;
**Internet Explorer:&lt;br /&gt;
***Propietat keyCode: el codi del caràcter de la tecla que s'ha premut&lt;br /&gt;
***Propietat charCode: no definit&lt;br /&gt;
**Resta de navegadors:&lt;br /&gt;
**Propietat keyCode: per a les tecles normals, no definit. Per a les tecles especials, el codi intern de la tecla.&lt;br /&gt;
**Propietat charCode: per a les tecles normals, el codi del caràcter de la tecla que s'ha premut. Per a les tecles especials, 0.&lt;br /&gt;
*Esdeveniment keyup:&lt;br /&gt;
**Mateix comportament en tots els navegadors:&lt;br /&gt;
***Propietat keyCode: codi intern de la tecla&lt;br /&gt;
***Propietat charCode: no definit&lt;br /&gt;
Per convertir el codi d'un caràcter (no confondre amb el codi intern) al caràcter que representa la tecla que s'ha premut, s'utilitza la funció ''String.fromCharCode().''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    window.onkeydown = teclado;&lt;br /&gt;
    window.onkeypress = teclado;&lt;br /&gt;
    window.onkeyup = teclado;&lt;br /&gt;
&lt;br /&gt;
    function teclado(magica) {&lt;br /&gt;
        var e = magica || window.event; // para salvar las deficiencias de IE=window.event&lt;br /&gt;
        mostrar(e.type, e.keyCode, e.which, e.charCode, e.key);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function mostrar(evento, keyCode, which, charCode, key) {&lt;br /&gt;
      &lt;br /&gt;
        let cadena =  &amp;quot;&amp;lt;b&amp;gt; Evento: &amp;lt;/b&amp;gt;&amp;quot; + evento &lt;br /&gt;
                     + &amp;quot; ==&amp;gt; &amp;lt;b&amp;gt; keyCode: &amp;lt;/b&amp;gt;&amp;quot; + keyCode &lt;br /&gt;
                     + &amp;quot;&amp;lt;b&amp;gt; which: &amp;lt;/b&amp;gt;&amp;quot; + which &lt;br /&gt;
                     + &amp;quot;&amp;lt;b&amp;gt; charCode: &amp;lt;/b&amp;gt;&amp;quot;+ charCode &lt;br /&gt;
                     + &amp;quot;&amp;lt;b&amp;gt; key: &amp;lt;/b&amp;gt;&amp;quot;+ key &lt;br /&gt;
                     + &amp;quot;&amp;lt;b&amp;gt; FromCharCode: &amp;lt;/b&amp;gt;&amp;quot;+String.fromCharCode(charCode)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         let info = document.getElementById(&amp;quot;info&amp;quot;); //display&lt;br /&gt;
         info.innerHTML += cadena&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;info&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://sospedia.net/pinchar-el-teclado-en-javascript/&lt;br /&gt;
&lt;br /&gt;
https://www.w3.org/2002/09/tests/keys-cancel2.html&lt;br /&gt;
&lt;br /&gt;
==== Exercici Teclat ====&lt;br /&gt;
Crea un script que mostri per pantalla la següent informació cada vedada que es premi una tecla:&lt;br /&gt;
* Caràcter permut  (amb key i StringCharCode)&lt;br /&gt;
* Tipus event (keydown, keypress, keyup)&lt;br /&gt;
* Propietat keycode&lt;br /&gt;
* Propietat charcode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[Exercici 5 events]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== informació sobre els esdeveniments de ratolí ===&lt;br /&gt;
La informació més rellevant sobre els esdeveniments relacionats amb el ratolí és la de les coordenades de la posició del punter del ratolí. Encara que l'origen de les coordenades sempre es troba en la cantonada superior esquerra, el punt que es pren com a referència de les coordenades pot variar.&lt;br /&gt;
&lt;br /&gt;
D'aquesta forma, és possible obtenir la posició del ratolí respecte de la pantalla de l'ordinador, respecte de la finestra del navegador i respecte de la pròpia pàgina HTML (que s'utilitza quan l'usuari ha fet scroll sobre la pàgina). Les coordenades més senzilles són les que es refereixen a la posició del punter respecte de la finestra del navegador, que s'obtenen mitjançant les propietats clientX i clientY:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function muestraInformacion(elEvento) {&lt;br /&gt;
   var esdeveniment = elEvento || window.event;&lt;br /&gt;
   var coordenadaX = esdeveniment.clientX;&lt;br /&gt;
   var coordenadaY = esdeveniment.clientY;&lt;br /&gt;
   alert(&amp;quot;Has premut el ratolí en la posició: &amp;quot; + coordenadaX + &amp;quot;, &amp;quot; + coordenadaY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.onclick = muestraInformacion;&lt;br /&gt;
//document.addeventlistener(click,&amp;quot;muestraInformacion&amp;quot;,false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Les coordenades de la posició del punter del ratolí respecte de la pantalla completa de l'ordinador de l'usuari s'obtenen de la mateixa forma, mitjançant les propietats '''screenX''' i '''screenY''':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var coordenadaX = esdeveniment.screenX;&lt;br /&gt;
var coordenadaY = esdeveniment.screenY;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En moltes ocasions, és necessari obtenir un altre parell de coordenades diferents: les que corresponen a la posició del ratolí respecte de l'origen de la pàgina. Aquestes coordenades no sempre coincideixen amb les coordenades respecte de l'origen de la finestra del navegador, ja que l'usuari pot fer scroll sobre la pàgina web. Internet Explorer no proporciona aquestes coordenades de forma directa, mentre que la resta de navegadors sí que ho fan. D'aquesta forma, és necessari detectar si el navegador és de tipus Internet Explorer i en cas afirmatiu realitzar un càlcul senzill:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Detectar si el navegador és Internet Explorer&lt;br /&gt;
var ie = navigator.userAgent.toLowerCase().indexOf('msie')!=-1;&lt;br /&gt;
&lt;br /&gt;
if(ie) {&lt;br /&gt;
     coordenadaX = esdeveniment.clientX + document.body.scrollLeft;&lt;br /&gt;
     coordenadaY = esdeveniment.clientY + document.body.scrollTop;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
     coordenadaX = esdeveniment.pageX;&lt;br /&gt;
     coordenadaY = esdeveniment.pageY;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
alert(&amp;quot;Has premut el ratolí en la posició: &amp;quot; + coordenadaX + &amp;quot;, &amp;quot; + coordenadaY + &amp;quot; respecte de la pàgina web&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La variable '''ie''' val '''true''' si el navegador en el qual s'executa el script és de tipus Internet Explorer (qualsevol versió) i val '''false''' en un altre cas. Per a la resta de navegadors, les coordenades respecte de l'origen de la pàgina s'obtenen mitjançant les propietats '''pageX''' i '''pageY'''. En el cas d'Internet Explorer, s'obtenen sumant la posició respecte de la finestra del navegador (clientX, clientY) i el desplaçament que ha sofert la pàgina (document.bodi.scrollLeft, document.bodi.scrollTop).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Client_page_screen.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gràfics senzills amb canvas ===&lt;br /&gt;
Amb els esdeveniments de teclat i ratolí podrem programar jocs senzills. Només ens caldrà saber com situar i moure gràfics per la pantalla. Amb aquesta finalitat ens serà d'ajuda l'ús de l'element '''canvas''' de HTML.&lt;br /&gt;
&lt;br /&gt;
Al següent exemple definim un canvas (llenç) de 800x600 píxels i hi situem la imatge d'un cotxe a la coordenada (400,300). &lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;canvas id=&amp;quot;myCanvas&amp;quot; width=&amp;quot;800&amp;quot; height=&amp;quot;600&amp;quot; style=&amp;quot;background-color: lightskyblue;&amp;quot;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img id=&amp;quot;cotxe&amp;quot; src=&amp;quot;cotxe.jpg&amp;quot; style=&amp;quot;display: none;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var canvas;&lt;br /&gt;
var ctx;&lt;br /&gt;
var imatge;&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
         canvas= document.getElementById(&amp;quot;myCanvas&amp;quot;);&lt;br /&gt;
         ctx = canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
         imatge=document.getElementById(&amp;quot;cotxe&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ctx.drawImage(imatge,400,300);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Si volem simular el moviment de la imatge haurem l'haurem d'esborrar de la posició antiga i tornar-la a dibuixar a la nova posició. Per borrar la imatge podem dibuixar un rectangle del color de fons del canvas sobre la imatge amb les instruccions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ctx.fillStyle = &amp;quot;lightskyblue&amp;quot;&lt;br /&gt;
ctx.fillRect(0,300,100,66);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'exemple dibuixem al canvas un triangle de color lightskyblue a la coordenada (0,300) i de dimensions 100x66.&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Coordenades del punter ===&lt;br /&gt;
Crea una pàgina on es mostri constantment les coordenades del punter dins de la pàgina (propietats clientX, clientY).&lt;br /&gt;
&lt;br /&gt;
=== event MOUSEOVER ===&lt;br /&gt;
Crea una pàgina de contingut lliure que tingui els següents elements:&lt;br /&gt;
*Títol (capçalera H1)&lt;br /&gt;
*Tres paràgrafs que continguin una imatge alineada a la dreta o a l'esquerra del text. La longitud del text de cada paràgraf serà prou extensa per a superar l'alçada de la imatge respectiva.&lt;br /&gt;
*Tres títols (capçalera H2) que precediran cadascun dels paràgrafs.&lt;br /&gt;
Programa les respostes als events MOUSEOVER de cada element de forma que:&lt;br /&gt;
*tots els elements de text (quatre capçaleres i tres paràgrafs) canviin de format quan tenen el punter del ratolí al damunt. Cada element de text tornarà al seu format original quan el punter ja no sigui al damunt&lt;br /&gt;
*les imatges giraran en sentit horari quan tinguin el punter al damunt i deixaran de fer-ho quan el punter ja no sigui al damunt.&lt;br /&gt;
&lt;br /&gt;
=== Ordre dels events ===&lt;br /&gt;
Crea una pàgina amb quatre seccions DIV aniuades i etiquetades amb els noms div1, ... , div4:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;div1&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;div2&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;div3&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;div4&amp;quot;&amp;gt;contingut random...&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea funcions de resposta a l'event CLICK per a cada element DIV que escrigui un missatge de l'estil &amp;quot;Has clickat sobre l'element div1&amp;quot;.&lt;br /&gt;
Com aconseguiries que l'ordre en què es disparen els elements siguin els següents?:&lt;br /&gt;
*div1,div2,div3,div4&lt;br /&gt;
*div4,div3,div2,div1&lt;br /&gt;
*div1,div3,div4,div2&lt;br /&gt;
&lt;br /&gt;
=== Event document.onload ===&lt;br /&gt;
Crea una pàgina on sigui imprescindible assignar les funcions de resposta a events quan es dispara l'event document.onload.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Estrella Michelin ===&lt;br /&gt;
&lt;br /&gt;
Un restaurant té 4 tapes principals on cadascuna té un preu  1 €, 2 €, 3 € i 4 € (esquerra a dreta). &lt;br /&gt;
&lt;br /&gt;
Com el local és petit, es disposa de dos cambrers, cadascun d'ells té un botó que l'executarà en el cas de servir una tapa. Quan un cambrer serveixi una tapa haurà:&lt;br /&gt;
*1. Primer seleccionar-se amb el botó&lt;br /&gt;
*2. Clicar a la tapa o tapes servides.&lt;br /&gt;
&lt;br /&gt;
Cada vegada que el cambrer faci click a una tapa el seu preu s'incrementarà en la recaudació del cambrer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Michelin.png|900px|center]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio michelin]]&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Gamepad.png|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Dibuixa un rectangle i que es mova en funció del joystick, i mostre per pantalla els diferents botons.&lt;br /&gt;
 &lt;br /&gt;
http://html5gamepad.com&lt;br /&gt;
&lt;br /&gt;
:[[ejm_gamepad]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ratolí i Teclat ===&lt;br /&gt;
a) Es vol que el ratolí, en qualsevol punt de la finestra del navegador, es mostri la posició del punter respecte del navegador i respecte de la pàgina.&lt;br /&gt;
[[Fitxer:ex_ratoli.gif|100px]]&lt;br /&gt;
&lt;br /&gt;
b) Es vol que, a més a més, en prémer qualsevol tecla, el missatge mostrat ha de canviar per indicar el nou esdeveniment i la seva informació associada.&lt;br /&gt;
[[Fitxer:ex_teclat.gif|100px]]&lt;br /&gt;
&lt;br /&gt;
c)Afegir la següent característica al script: quan es prem un botó del ratolí, el color de fons del quadre de missatge ha de ser groc (#FFFFCC) i quan es prem una tecla, el color de fons ha de ser blau (#CCE6FF). En tornar a moure el ratolí, el color de fons torna a ser blanc.&lt;br /&gt;
&amp;lt;p&amp;gt;[[Fitxer:ex_tec_rat_color.gif|200px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Exercici 6 Events]]&lt;br /&gt;
&lt;br /&gt;
=== Posició ratolí ===&lt;br /&gt;
Crear un script que informi a l'usuari en què zona de la pantalla ha premut el ratolí. Les zones definides són les següents: esquerra a dalt, esquerra a baix, dreta a dalt i dreta a baix.&lt;br /&gt;
&lt;br /&gt;
:[[Exercici 7 Events]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Cuadrat===&lt;br /&gt;
&lt;br /&gt;
Es desitja que un cuadrat es mova al llarg de la pantalla&lt;br /&gt;
&lt;br /&gt;
:[[sol_cuadrat]]&lt;br /&gt;
&lt;br /&gt;
=== Joc Tenis ===&lt;br /&gt;
Es tracta de implementar en Javascript un dels 1ers jocs que es va inventar per a PC. El joc del Tenis. &lt;br /&gt;
[[Fitxer:tenis.png|400px|center]]&lt;br /&gt;
Per començar el joc s'ha de pulsar la tecla 'S', per parar 'P' i per reinicializar la 'R'.&lt;br /&gt;
&lt;br /&gt;
Jugador 1:&lt;br /&gt;
*Utilitza el ratolí per el desplaçament de la raqueta&lt;br /&gt;
Jugador 2:&lt;br /&gt;
*tecla '↑' per desplaçar la raqueta cap a dalt&lt;br /&gt;
*tecla '↓' per desplaçar la raqueta cap a baix&lt;br /&gt;
Altres aspectes del joc&lt;br /&gt;
*A més a més, hi ha un marcador que indiqui qui va guanyant.&lt;br /&gt;
*També hi ha un botó, per exemple F2, per augmentar el número de pilotes&lt;br /&gt;
*També hi ha un botó per canviar els colors del joc. Pot existir diversos temes (F5-F8)&lt;br /&gt;
&lt;br /&gt;
https://www.w3schools.com/html/html5_draganddrop.asp&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Expressions Regulars =&lt;br /&gt;
Les expressions regulars son una necessitat a l'hora de validar formularis. Alguns problemes de validació no es podrien solucionar de una manera elegant sense elles.&lt;br /&gt;
Les expressions regulars son senzillament una manera d'expresar un patró per a cadenes coincidents de text. La expressions contenen termes i operadors que ens pemeten definir els patrons.&lt;br /&gt;
&lt;br /&gt;
== Creació d'expresions regulars ==&lt;br /&gt;
A Javascript, com succeeix amb la majoria d'objectes, existeixen dos formes de crear expresions regulars: &lt;br /&gt;
*mitjançant un literal&lt;br /&gt;
*creant una instància d'un objecte de tipus '''RegExp'''&lt;br /&gt;
&lt;br /&gt;
La creació d'una expressió regular amb un literal és molt sezill. Veïem un exemple. Volem crear una expressió regular que coincideixi exactament amb el string &amp;quot;test&amp;quot;:&lt;br /&gt;
&amp;lt;source type=java&amp;gt;&lt;br /&gt;
var pattern = /test/;&lt;br /&gt;
&amp;lt;/source &amp;gt;&lt;br /&gt;
Les expresions regulars van envoltades del caràctes /. Igual que els String van envoltades del caràcter &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
També podíem haver creat una instància del objecte RegExp de la següent manera:&lt;br /&gt;
&amp;lt;source type=java&amp;gt;&lt;br /&gt;
var pattern = new RegExp(&amp;quot;test&amp;quot;);&lt;br /&gt;
&amp;lt;/source &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modificadors a utilitzar a l'hora de crear expressions regulars ==&lt;br /&gt;
A més a més de la pròpia expressió regular, podem introduïr els següents modificadors:&lt;br /&gt;
*''i'': Fa que no distingeixi de majúscules i minúscules. ex: /test/i&lt;br /&gt;
*''g'': Realitza una comparació global, en comptes de parar-se després de la primera coincidència.&lt;br /&gt;
*''m'': Realitza una comparació multilínia (més detalls a https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline )&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source type=java&amp;gt;&lt;br /&gt;
var pattern = /test/ig&lt;br /&gt;
var pattern2 = new RegExp(&amp;quot;test&amp;quot;,&amp;quot;ig&amp;quot;);&lt;br /&gt;
//exemple d'us de la expressió regular&lt;br /&gt;
alert(pattern.test(&amp;quot;test&amp;quot;));&lt;br /&gt;
alert(pattern2.test(&amp;quot;test&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Termes i Operadors ==&lt;br /&gt;
&lt;br /&gt;
*''Coincidència exacta'': Tot lo que no sigui un caràcter especial o un operador haurà d'apareixer de forma literal en la expressió. Ex: /test/ la paraula '''test'' ha d'aparèixer exactament.&lt;br /&gt;
*''Combinacions de caràcters'': Moltes vegades no volem combinar un caràcter literal específic, sino un grup finit de caràcters. Podem especificar-ho col·locant el grup de caràcters que volem combinar entre claudàtors. Ex: [abc]&lt;br /&gt;
*''Combinacions de caràcters excloents'': Altres vegades volem combinar tots els caràcters trets d'uns quants. Per fer-ho podem utilitzar el símbol ''^'' seguit dels caràcters que no volem en la expresió. Ex: [^abc]. &lt;br /&gt;
*''Rang de valors'': També tenim la habilitat d'especificar un rang de valors. Ex: volem qualsevol caràcter entre '''a''' i '''m''' minmúscula --&amp;gt; [a-m] (ambdós incloses).&lt;br /&gt;
&lt;br /&gt;
=== Caràcters especials ===&lt;br /&gt;
Existeixen caràcters especials en les expresions regulars, de fet, ja hem vist uns quants: '''[''', ''']''', '''-''' i '''^'''.&lt;br /&gt;
Però encara hi ha uns quants més com serien el '''$''', '''{''', '''}''', '''?''', ''',''', '''+''' i el '''.'''&lt;br /&gt;
Com podem fer per utilitzar-los de forma literal en comptes d'utilitzar-los com a operadors de les expressions regulars? Escapant-los.&lt;br /&gt;
Però com? Utilitzant un caràcter especial: ''\''. Ex: La expressió regular '''/\[/''' significa el caràcter '''[''' i no l'inici d'un grup de caràcters.  &lt;br /&gt;
Així mateix, per poder utilitzar el caràcter '''\''' dintre de la expressió regular l'haurem d'escapar. Ex: '''\\''' correspon al literal '''\'''.&lt;br /&gt;
&lt;br /&gt;
=== Principis i finals ===&lt;br /&gt;
A vegades volem que un patró coincideixi amb el principi d'una cadena o amb el final. &lt;br /&gt;
*Principi: Utilitzarem el caràcter ''^''. Ex: /^test/ : només coincideix si la cadena '''test''' coincideix amb el principi.&lt;br /&gt;
*Final: Utilitzarem el caràcter ''$''. Ex: /test$/ : només coincideix si la cadena '''test''' coincideix amb el final.&lt;br /&gt;
*Principi i final: Ex: /^test$/ : Indica que el patró especificat ha d'incluir tota la cadena candidata.&lt;br /&gt;
&lt;br /&gt;
=== Repetició de caràcters ===&lt;br /&gt;
&lt;br /&gt;
Si volem combinar una serie de quatre caràcters 'a' podem expressar-ho amb ''/aaa/'' però que succeeix si volem utilitzar un número qualsevol de repeticions del mateix caràcter?&lt;br /&gt;
Tenim diferents opcions:&lt;br /&gt;
*Podem especificar que un caràcter és opcional, es a dir, &amp;lt;b&amp;gt;pot aparèixer alguna vegada o cap (0 ó 1)&amp;lt;/b&amp;gt;, Es fa afegint el caràcter '''''?''''' al final. Exemple: /t?est/. Aquest patró combina dues opcions: '''test i est'''.&lt;br /&gt;
*Si volem que un caràcter '''apareixi moltes vegades (1 o més)''' utilitzarem '''''+'''''. Ex: /t+est/. Aquest patró combina '''test''', '''ttest''' i '''tttest''' però no '''est'''.&lt;br /&gt;
*Si volem que un '''caràcter apareixi zero o més vegades (0 o més)''' utilitzem el caràcter '''*'''. Ex: /t*est/. Aquest patró combina '''test''', '''ttest''', '''tttest''' i també '''est'''.&lt;br /&gt;
*Podem especificar una quantitat concreta amb el número de repeticions permeses entre claudàtors '''''{}'''''Text en negreta. Per exemple, /a{4}/ indica una coincidència de quatre caràcters 'a' consecutius.&lt;br /&gt;
*També podem especificar un intérval per al compte de repeticions. Per exemple, /a{4,10}/ indica una combinació de 4 a 10 caracters 'a' consecutius.&lt;br /&gt;
*Si en aquest interval no s'indica el segon valor de l'intèrval indiquem que el número final és infinit. Ex: /a{4,}/. Aquest patró combina qualsevol cadena de cuatre o més caràcters 'a' consecutius. Fixat que és important posar la '''coma''' després del 4.&lt;br /&gt;
&lt;br /&gt;
=== Caràcters predefinits ===&lt;br /&gt;
La sintaxis de les expressions regulars ens proporcionen un nombre de termes predefinits que representen caràcters o clases de caràcters que s'utilitzen amb freqüència. &lt;br /&gt;
Taula:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Terme Predefinit&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Equivalència&lt;br /&gt;
|-&lt;br /&gt;
| \t ||Tabulació horitzontal&lt;br /&gt;
|-&lt;br /&gt;
| \b ||Retrocés&lt;br /&gt;
|-&lt;br /&gt;
| \v ||Tabulació Vertical&lt;br /&gt;
|-&lt;br /&gt;
| \f||Salt de página&lt;br /&gt;
|-&lt;br /&gt;
| \r||Retorn de carro.&lt;br /&gt;
|-&lt;br /&gt;
| \n||Nova linia&lt;br /&gt;
|-&lt;br /&gt;
| \cA : \cZ||Caràcters de control&lt;br /&gt;
|-&lt;br /&gt;
| \x0000 : \xFFFF||Unicode Hexadecimal&lt;br /&gt;
|-&lt;br /&gt;
|  \x00 : \xFF||ASCII Hexadecimal&lt;br /&gt;
|-&lt;br /&gt;
| .||Qualsevol caràcter, excepte nova linia&lt;br /&gt;
|-&lt;br /&gt;
|  \d||Qualsevol dígit decimal. Equivalent a [0-9]&lt;br /&gt;
|-&lt;br /&gt;
| \D||Qualsevol caràcter menys un dígit decimal. Equivalent a [^0-9]&lt;br /&gt;
|-&lt;br /&gt;
| \w||Qualsevol caràcter alfanuméric incloent el subratllat. [A-Za-z0-9_]&lt;br /&gt;
|-&lt;br /&gt;
| \W||Qualsevol caràcter menys els alfanumèric i el subratllat. [^A-Za-z0-9_]&lt;br /&gt;
|-&lt;br /&gt;
| \s||Qualsevol espai en blanc (espai, tabulador, salt de pàgina,etc.)&lt;br /&gt;
|-&lt;br /&gt;
| \S||Qualsevol caràcter menys un espai en blanc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Per veure el llistat complert fes click [http://www.visibone.com/regular-expressions/ aquí].&lt;br /&gt;
&lt;br /&gt;
=== Agrupació de caràcters ===&lt;br /&gt;
De moment, hem observat que els operadors + i * només afecten al terme que els '''precedeix'''. Si volem aplicar-los a un grup de termes, podem utilitzar ''parèntesis'', igual que si es tractés d'una formula matemàtica. Per exemple: /(ab)+/. Aquest patró combina una o més aparicions de la cadena '''ab'''.&lt;br /&gt;
&lt;br /&gt;
=== Alternància de caràcters ===&lt;br /&gt;
La alternància pot expressar-se utilitzant el caràcter '''|'''. Per exemple: /a|b/ combina el caràcter '''a''' o '''b''', i /(ab)+|(cd)+/ combina només una o més repeticions de '''ab''' o '''cd'''.&lt;br /&gt;
&lt;br /&gt;
== Mètodes de les Expressions Regulars ==&lt;br /&gt;
*''pattern.test(cadena)'' : Executa la expressió regular e indica si la cadena passada per paràmetre coincideix o no. (retorna True o False)&lt;br /&gt;
*''pattern.exec(cadena)'' : Executa la expressió regular i retorna la primera coincidència.&lt;br /&gt;
== Resum Expressions Regulars ==&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Expresiones.jpg]]&lt;br /&gt;
[http://rua.ua.es/dspace/bitstream/10045/13363/6/07c-JavaScriptExpReg.pdf Resum Expressions Regulars]&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.regexr.com/ Comprovar expressions regulars]&lt;br /&gt;
&lt;br /&gt;
[https://regex101.com/ Comprovar expressions regulars II]&lt;br /&gt;
&lt;br /&gt;
Crea un patró per a cadascuna de les diferents cadenes que es mostren a continuació:&lt;br /&gt;
&lt;br /&gt;
*Codi postal. Ex: 46700&lt;br /&gt;
*Numero de telèfon amb prefix i guións, el primer nombre pot ser un 8 ó 9. Ex: 93-123-11-33&lt;br /&gt;
*Numero de telèfon amb prefix i punts. Ex: 93-1.231.1339&lt;br /&gt;
*Numero de telèfon internacional. Ex: (+34)952356817 &lt;br /&gt;
*Nom d'usuari amb un mínim de 4 i un màxim de 15. Ex: julio_30&lt;br /&gt;
*Nombre Real. Ex:  -122.33 ó 7,3 ó 8 &lt;br /&gt;
*Numero ISBN de 13 dígits: 978-3-16-148410-0&lt;br /&gt;
*Numero de la seguretat social: 01-123456789&lt;br /&gt;
*Adreça Postal amb les següent condicions: Carrer (C\), Plaza(Pz.), Avinguda(Av.). Direcció. Numero - Porta.&lt;br /&gt;
Ex: C\ Mare de Deu de montserrat. 233 - 2&lt;br /&gt;
*Numero IP d'un ordinador de la versió 4.&lt;br /&gt;
*Numero Mac d'un ordinador separats per ':'&lt;br /&gt;
*URL (amb http, https, www, etc)&lt;br /&gt;
*Data: Ex: DD/MM/AAAA&lt;br /&gt;
*Hora: 23:55:55&lt;br /&gt;
*Email&lt;br /&gt;
*Comprobar un nombre propio&lt;br /&gt;
*Targeta de crèdit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*Codi postal. Ex: 46700&lt;br /&gt;
**sol: ^\d{5}$ &lt;br /&gt;
*Numero de telèfon amb prefix i guións, el primer nombre pot ser un 8 ó 9. Ex: 93-123-11-33&lt;br /&gt;
**sol: ^[89](\d-\d{3})-\d{2}-\d{2}$&lt;br /&gt;
*Numero de telèfon amb prefix i punts. Ex: 93-1.231.1339&lt;br /&gt;
**sol: ^[89](\d-\d.)\d{3}\.\d{3}$&lt;br /&gt;
*Numero de telèfon internacional. Ex: (+34)952356817 &lt;br /&gt;
**sol: ^\(\+\d{2,3}\)\d{9}$&lt;br /&gt;
*Nom d'usuari amb un mínim de 4 i un màxim de 15. Ex: julio_30&lt;br /&gt;
**sol: ^[a-z\d_]{4,15}$&lt;br /&gt;
*Nombre Real. Ex:  -122.33 ó 7,3 ó 8 &lt;br /&gt;
**sol: ^[+-]?\d+([,.]\d+)?$    &lt;br /&gt;
*Numero ISBN de 13 dígits: 978-3-16-148410-0&lt;br /&gt;
*Numero de la seguretat social: 01-123456789&lt;br /&gt;
**sol: ^\d{2}-\d{9}$&lt;br /&gt;
**sol: ^[0-1]{2}-\d{9}$&lt;br /&gt;
*Adreça Postal amb les següent condicions: Carrer (C\), Plaza(Pz.), Avinguda(Av.). Direcció. Numero - Porta.&lt;br /&gt;
Ex: C\ Mare de Deu de montserrat. 233 - 2&lt;br /&gt;
**sol: ^((C\\)|(Pz\.)|(Av\.))\s.+\.\s\d{1,5}\s-\s\d$&lt;br /&gt;
((C\\)|(Pz\.)|(Av\.))[a-zA-Z ]+\.[0-9 ]+\-[0-9 ]+&lt;br /&gt;
*Numero IP d'un ordinador de la versió 4.&lt;br /&gt;
** sol: ^((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9][0-9]?)\.)((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9][0-9]|[0-9])\.){2}((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9][0-9]|[0-9]))$&lt;br /&gt;
 ^(?:\d{1,3}\.){3}\d{1,3}$&lt;br /&gt;
*Numero Mac d'un ordinador separats per ':'&lt;br /&gt;
*URL (amb http, https, www, etc)&lt;br /&gt;
**sol:(www\.|http:\/\/|https:\/\/)\S*\.(com|es|org))&lt;br /&gt;
*Data: Ex: DD/MM/AAAA&lt;br /&gt;
**sol: ^\d{1,2}\/\d{1,2}\/\d{2,4}$ &lt;br /&gt;
         ^([3][0-1]|[0-2][0-9])\/[0-1]?[0-2]\/[1-2]\d{3}$  coge hasta el día 31 y el mes 12 &lt;br /&gt;
*Hora: 23:55:55&lt;br /&gt;
**sol: ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$ &lt;br /&gt;
*Email&lt;br /&gt;
**sol: /^[\w]+@{1}[\w]+\.[a-z]{2,3}$/&lt;br /&gt;
**sol: ^[\\w-]+(\\.[\\w-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$ &lt;br /&gt;
*Comprobar un nombre propio&lt;br /&gt;
**sol: /^([A-Z]{1}[a-zñáéíóú]+[\s]*)+$/ &lt;br /&gt;
*Targeta de crèdit&lt;br /&gt;
**sol:  ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Formularis =&lt;br /&gt;
JavaScript disposa de nombroses propietats i funcions que faciliten la programació d'aplicacions que manegen formularis. En primer lloc, quan es carrega una pàgina web, el navegador crea automàticament una matriu anomenat forms i que conté la referència a tots els formularis de la pàgina.&lt;br /&gt;
&lt;br /&gt;
Per accedir al array forms , s'utilitza l'objecte document , de manera que document.forms és la matriu que conté tots els formularis de la pàgina. Com es tracta d'un array, l'accés a cada formulari es realitza amb la mateixa sintaxi dels arrays. La següent instrucció accedeix al primer formulari de la pàgina:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  document. forms [0]; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A més de l'array de formularis, el navegador crea automàticament una matriu anomenat ''elements'' per cadascun dels formularis de la pàgina. Cada array elements conté la referència a tots els elements (quadres de text, botons, llistes desplegables, etc.) d'aquest formulari. Utilitzant la sintaxi dels arrays, la següent instrucció obté el primer element del primer formulari de la pàgina:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  document. forms [0]. elements [0]; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La sintaxi dels arrays no sempre és tan concisa. El següent exemple mostra com obtenir directament l'últim element del primer formulari de la pàgina:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  document. forms [0]. elements [document. forms [0]. elements. length - 1];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Encara que aquesta forma d'accedir als formularis és ràpida i senzilla, té un inconvenient molt greu. Què passa si canvia el disseny de la pàgina i en el codi HTML es canvia l'ordre dels formularis originals o s'afegeixen nous formularis? El problema és que &amp;quot;el primer formulari de la pàgina&amp;quot; ara podria ser un altre formulari diferent al que espera l'aplicació.&lt;br /&gt;
&lt;br /&gt;
En un entorn tan canviant com el disseny web, és molt difícil confiar que l'ordre dels formularis es mantingui estable en una pàgina web. Per aquest motiu, sempre s'hauria d'evitar l'accés als formularis d'una pàgina mitjançant l'array ''document.forms''.&lt;br /&gt;
&lt;br /&gt;
Una forma d'evitar els problemes del mètode anterior consisteix a accedir als formularis d'una pàgina a través del seu nom (atribut '''name''') o a través del seu atribut '''id''' . L'objecte document permet accedir directament a qualsevol formulari mitjançant la seva atribut '''name''':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 var formularioPrincipal = document. formulari;&lt;br /&gt;
 var formularioSecundario = document. otro_formulario;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Form name = &amp;quot;formulari&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/ Form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Form name = &amp;quot;otro_formulario&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/ Form&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Accedint d'aquesta forma als formularis de la pàgina, l'script funciona correctament encara que es reordenin els formularis o s'afegeixin nous formularis a la pàgina. Els elements dels formularis també es poden accedir directament mitjançant el seu atribut '''name''':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  var formularioPrincipal = document. formulari;&lt;br /&gt;
 var primerElemento = document. formulari. element;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Form name = &amp;quot;formulari&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;Input type = &amp;quot;text&amp;quot; name = &amp;quot;element&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/ Form&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Òbviament, també es pot accedir als formularis i als seus elements utilitzant les funcions DOM d'accés directe als nodes. El següent exemple utilitza l'habitual funció '''document.getElementById()''' per accedir de forma directa a un formulari i un dels seus elements:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 var formularioPrincipal = document. getElementById (&amp;quot;formulari&amp;quot;);&lt;br /&gt;
 var primerElemento = document. getElementById (&amp;quot;element&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Form name = &amp;quot;formulari&amp;quot; id = &amp;quot;formulari&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;Input type = &amp;quot;text&amp;quot; name = &amp;quot;element&amp;quot; id = &amp;quot;element&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/ Form&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Independentment del mètode utilitzat per obtenir la referència a un element de formulari, cada element disposa de les següents propietats útils per al desenvolupament de les aplicacions:&lt;br /&gt;
*''type'' : indica el tipus d'element que es tracta. Per als elements de tipus &amp;lt;input&amp;gt; ( text , button , checkbox , etc.) coincideix amb el valor del seu atribut '''type''' . Per a les llistes desplegables normals (element &amp;lt;select&amp;gt; ) el seu valor és '''select-one''' , el que permet diferenciar-les de les llistes que permeten seleccionar diversos elements alhora i el tipus és '''select-multiple'''. Finalment, en els elements de tipus &amp;lt;textarea&amp;gt; , el valor de type és '''textarea''' .&lt;br /&gt;
*''form'' : és una referència directa al formulari al qual pertany l'element. Així, per accedir al formulari d'un element, es pot utilitzar document.getElementById(&amp;quot;id_del_elemento&amp;quot;).form&lt;br /&gt;
*''name'' : obté el valor de l'atribut name de XHTML. Només es pot llegir el seu valor, per la qual cosa no es pot modificar.&lt;br /&gt;
*''value'' : permet llegir i modificar el valor de l'atribut value de XHTML. Per als camps de text ( &amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt; i &amp;lt;textarea&amp;gt; ) obté el text que ha escrit l'usuari. Per als botons obté el text que es mostra al botó. Per als elements checkbox i radiobutton no és molt útil, com es veurà més endavant&lt;br /&gt;
&lt;br /&gt;
== Validació ==&lt;br /&gt;
&lt;br /&gt;
La principal utilitat de JavaScript en el maneig dels formularis és la validació de les dades introduïdes pels usuaris. Abans d'enviar un formulari al servidor, es recomana validar mitjançant JavaScript les dades inserides per l'usuari. D'aquesta manera, si l'usuari ha comès algun error en omplir el formulari, se li pot notificar de forma instantània, sense necessitat d'esperar la resposta del servidor.&lt;br /&gt;
&lt;br /&gt;
Notificar els errors de forma immediata mitjançant JavaScript millora la satisfacció de l'usuari amb l'aplicació (el que tècnicament es coneix com &amp;quot;millorar l'experiència d'usuari&amp;quot;) i ajuda a reduir la càrrega de processament al servidor.&lt;br /&gt;
&lt;br /&gt;
Normalment, la validació d'un formulari consisteix en cridar a una funció de validació quan l'usuari prem sobre el botó d'enviament del formulari. En aquesta funció, es comproven si els valors que ha introduït l'usuari compleixen les restriccions imposades per l'aplicació.&lt;br /&gt;
&lt;br /&gt;
Encara que hi ha tantes possibles comprovacions com a elements de formulari diferents, algunes comprovacions són molt habituals: que ompli un camp obligatori, que se seleccioni el valor d'una llista desplegable, que l'adreça d'email indicada sigui correcta, que la data introduïda sigui lògica, que s'hagi introduït un nombre on així es requereix, etc.&lt;br /&gt;
&lt;br /&gt;
A continuació es mostra el codi JavaScript bàsic necessari per incorporar la validació a un formulari:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;formulario&amp;quot;  onSubmit=&amp;quot;return ValidaCampos()&amp;quot;&amp;gt;&lt;br /&gt;
 Teléfono: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;telefono&amp;quot; size=&amp;quot;15&amp;quot; maxlength=&amp;quot;15&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
           &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar&amp;quot; name=&amp;quot;enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
I l'esquema de la funció validacio() és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function ValidaCampos() {&lt;br /&gt;
   var expresion_regular_telefono = /^[89](\d-\d.)\d{3}\.\d{3}$/;  &lt;br /&gt;
// 9 cifras numéricas.&lt;br /&gt;
// Usaremos el método &amp;quot;test&amp;quot; de las expresiones regulares:&lt;br /&gt;
      if (expresion_regular_telefono.test(formulario.telefono.value) == false) {&lt;br /&gt;
                alert('Campo TELEFONO no válido.');&lt;br /&gt;
                return false; // sale de la función y NO envía el formulario&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
                alert('Gracias por rellenar nuestro formulario correctamente.');&lt;br /&gt;
                return true; // sale de la función y SÍ envía el formulario&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El funcionament d'aquesta tècnica de validació es basa en el comportament de l'esdeveniment '''onsubmit''' de JavaScript. Igual que altres esdeveniments com '''onclick''' i '''onkeypress''' , l'esdeveniment '''onsubmit''' varia el seu comportament en funció del valor que retorna.&lt;br /&gt;
&lt;br /&gt;
Així, si l'esdeveniment '''onsubmit''' torna el valor '''true''' , el formulari s'envia com ho faria normalment. No obstant això, si l'esdeveniment onsubmit torna el valor '''false''' , el formulari no s'envia. La clau d'aquesta tècnica consisteix a comprovar tots i cadascun dels elements del formulari. En tant es troba un element incorrecte, es torna el valor '''false''' . Si no es troba cap error, es torna el valor '''true'''.&lt;br /&gt;
&lt;br /&gt;
Per tant, en primer lloc es defineix l'esdeveniment '''onsubmit''' del formulari com:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  onsubmit = &amp;quot;return validacio()&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com el codi JavaScript retorna el valor resultant de la funció '''validacio()''' , el formulari només s'enviarà al servidor si aquesta funció retorna '''true''' . En el cas que la funció '''validacio()''' retorni '''false''' , el formulari romandrà sense enviar.&lt;br /&gt;
&lt;br /&gt;
Dins de la funció '''validacio()''' es comproven totes les condicions imposades per l'aplicació. Quan no es compleix una condició, es retorna '''false''' i per tant el formulari no s'envia. Si s'arriba al final de la funció, totes les condicions s'han complert correctament, de manera que es retorna '''true''' i el formulari s'envia.&lt;br /&gt;
&lt;br /&gt;
La notificació dels errors comesos depèn del disseny de cada aplicació. En el codi de l'exemple anterior simplement es mostren missatges mitjançant la funció '''alert()''' indicant l'error produït. Les aplicacions web ben dissenyades mostren cada missatge d'error al costat de l'element de formulari corresponent i també solen mostrar un missatge principal indicant que el formulari conté errors.&lt;br /&gt;
&lt;br /&gt;
Un cop definit l'esquema de la funció '''validacio()''' , s'ha d'afegir a aquesta funció el codi corresponent a totes les comprovacions que es realitzen sobre els elements del formulari.&lt;br /&gt;
&lt;br /&gt;
== Validació formularis HTML5==&lt;br /&gt;
&lt;br /&gt;
[http://cybmeta.com/validacion-de-formularios-con-html5/ Validació formularis HTML5 I]&lt;br /&gt;
&lt;br /&gt;
[http://mytutorials85.blogspot.com.es/2012/04/formularios-en-html5.html?email=fdfds%40fds Validació formularis HTML5 II]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation Client-side form validation]&lt;br /&gt;
&lt;br /&gt;
== Exercicis de Validació ==&lt;br /&gt;
&lt;br /&gt;
=== Formulari de validació 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea un formulari que demani 4 camps en un textbox: nom, cognoms, email i telèfon. El formulari tindrà un botó &amp;quot;Enviar&amp;quot; que validarà el contingut dels textbox i en cas de passar les validacions s'obrirà una nova pàgina (que no cal que existeixi) amb els valors introduïts passats amb el mètode GET:&lt;br /&gt;
*tots els camps seran obligatoris&lt;br /&gt;
*el format serà el típic de cada camp&lt;br /&gt;
*mostra els missatges d'error d'un en un, per ordre i posant el focus al camp que produeix cada error&lt;br /&gt;
*usa els elements que coneixes de HTML, CSS, etc per a marcar l'error. Sigues creatiu&lt;br /&gt;
&lt;br /&gt;
=== Formulari de validació 2 ===&lt;br /&gt;
&lt;br /&gt;
Al formulari anterior afegeix els camps data de naixement, adreça, codi postal i municipi (per aquest ordre) tenint en compte:&lt;br /&gt;
*la data de naixement ha de ser vàlida, en format dd/mm/aaaa i anterior a la data actual.&lt;br /&gt;
*l'adreça estarà formada per caràcters alfanumèrics i també admetrà espais,comes i guions.&lt;br /&gt;
*el codi postal i municipi tindran el format típic d'aquests camps.&lt;br /&gt;
&lt;br /&gt;
=== solució ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.input_ok {background-color: lightcyan}&lt;br /&gt;
.input_error {background-color: rgb(255, 255, 119)}&lt;br /&gt;
.label_error {color: darkred}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body &amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;Exercici 1 de Validacions&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;form name=&amp;quot;formulari&amp;quot; onSubmit=&amp;quot;return valida()&amp;quot; action=&amp;quot;ex_validacions.html&amp;quot; method=&amp;quot;get&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label for=&amp;quot;nom&amp;quot;&amp;gt;Nom:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nom&amp;quot; name=&amp;quot;nom&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_nom&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;cognoms&amp;quot;&amp;gt;Cognoms:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;cognoms&amp;quot; name=&amp;quot;cognoms&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_cognoms&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;Email:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_email&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;telefon&amp;quot;&amp;gt;Telefon:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;telefon&amp;quot; name=&amp;quot;telefon&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_telefon&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;data&amp;quot;&amp;gt;Data de naixement:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;data&amp;quot; name=&amp;quot;data&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_data&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;adreca&amp;quot;&amp;gt;Adreça:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;adreca&amp;quot; name=&amp;quot;adreca&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_adreca&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;cp&amp;quot;&amp;gt;Codi postal:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;cp&amp;quot; name=&amp;quot;cp&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_cp&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;label for=&amp;quot;municipi&amp;quot;&amp;gt;Municipi:&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;municipi&amp;quot; name=&amp;quot;municipi&amp;quot; class=&amp;quot;input_ok&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;label id=&amp;quot;er_municipi&amp;quot; class=&amp;quot;label_error&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body &amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function valida(){&lt;br /&gt;
&lt;br /&gt;
var nom=document.getElementById(&amp;quot;nom&amp;quot;).value;&lt;br /&gt;
var cognoms=document.getElementById(&amp;quot;cognoms&amp;quot;).value;&lt;br /&gt;
var email=document.getElementById(&amp;quot;email&amp;quot;).value;&lt;br /&gt;
var telefon=document.getElementById(&amp;quot;telefon&amp;quot;).value;&lt;br /&gt;
var data=document.getElementById(&amp;quot;data&amp;quot;).value;&lt;br /&gt;
var adreca=document.getElementById(&amp;quot;adreca&amp;quot;).value;&lt;br /&gt;
var cp=document.getElementById(&amp;quot;cp&amp;quot;).value;&lt;br /&gt;
var municipi=document.getElementById(&amp;quot;municipi&amp;quot;).value;&lt;br /&gt;
var patt_alfanumeric = /^[\wñÑçÇàáèéíòóúÀÁÈÉÍÒÓÚ]+(\s[\wñÑçÇàáèéíòóúÀÁÈÉÍÒÓÚ]+)*$/;&lt;br /&gt;
var patt_email = /^\w+@\w+\.\w+$/;&lt;br /&gt;
var patt_telefon =/^\d{9}$/;&lt;br /&gt;
var patt_data = /^\d{2}\/\d{2}\/\d{4}$/;&lt;br /&gt;
var patt_adreca = /^[\wñÑçÇàáèéíòóúÀÁÈÉÍÒÓÚ\,\.\-]+(\s[\wñÑçÇàáèéíòóúÀÁÈÉÍÒÓÚ\,\.\-]+)*$/;&lt;br /&gt;
var patt_cp=/^\d{5}$/;&lt;br /&gt;
&lt;br /&gt;
// reset format dels textbox i missatges d'error&lt;br /&gt;
document.getElementById(&amp;quot;nom&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_nom&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;cognoms&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_cognoms&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;email&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_email&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;telefon&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_telefon&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;data&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_data&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;adreca&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_adreca&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;cp&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_cp&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;municipi&amp;quot;).className=&amp;quot;input_ok&amp;quot;;&lt;br /&gt;
document.getElementById(&amp;quot;er_municipi&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//validació del nom&lt;br /&gt;
if(nom==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;nom&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;nom&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_nom&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_alfanumeric.test(nom)) {&lt;br /&gt;
	document.getElementById(&amp;quot;nom&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;nom&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_nom&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació dels cognoms&lt;br /&gt;
if(cognoms==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;cognoms&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;cognoms&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_cognoms&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_alfanumeric.test(cognoms)) {&lt;br /&gt;
	document.getElementById(&amp;quot;cognoms&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;cognoms&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_cognoms&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació del email&lt;br /&gt;
if(email==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;email&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;email&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_email&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_email.test(email)) {&lt;br /&gt;
	document.getElementById(&amp;quot;email&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;email&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_email&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte (ex. usuari@servidor.xx)&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació del telefon&lt;br /&gt;
if(telefon==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;telefon&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;telefon&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_telefon&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_telefon.test(telefon)) {&lt;br /&gt;
	document.getElementById(&amp;quot;telefon&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;telefon&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_telefon&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte (6 digits)&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació de la data&lt;br /&gt;
if(data==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_data&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_data.test(data)) {&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_data&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte (dd/mm/aaaa)&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var components_data = data.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
var val_data=Date.parse(components_data[2]+&amp;quot;/&amp;quot;+components_data[1]+&amp;quot;/&amp;quot;+components_data[0]);&lt;br /&gt;
&lt;br /&gt;
if(isNaN(val_data)) {&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_data&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;data no vàlida&amp;quot;;&lt;br /&gt;
	return false;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var today=new Date();&lt;br /&gt;
if(val_data&amp;gt;=today) {&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;data&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_data&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;la data ha de ser anterior a la data acutal&amp;quot;;&lt;br /&gt;
	return false;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//validació de l'adreça&lt;br /&gt;
if(adreca==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;adreca&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;adreca&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_adreca&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_adreca.test(adreca)) {&lt;br /&gt;
	document.getElementById(&amp;quot;adreca&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;adreca&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_adreca&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació del codi postal&lt;br /&gt;
if(cp==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;cp&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;cp&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_cp&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_cp.test(cp)) {&lt;br /&gt;
	document.getElementById(&amp;quot;cp&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;cp&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_cp&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte (5 digits)&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//validació del municipi&lt;br /&gt;
if(municipi==&amp;quot;&amp;quot;) {&lt;br /&gt;
	document.getElementById(&amp;quot;municipi&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;municipi&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_municipi&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;camp obligatori&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(!patt_adreca.test(municipi)) {&lt;br /&gt;
	document.getElementById(&amp;quot;municipi&amp;quot;).className=&amp;quot;input_error&amp;quot;;&lt;br /&gt;
	document.getElementById(&amp;quot;municipi&amp;quot;).focus();&lt;br /&gt;
	document.getElementById(&amp;quot;er_municipi&amp;quot;).innerHTML=&amp;quot;&amp;amp;nbsp;format incorrecte&amp;quot;;&lt;br /&gt;
	return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
POSIBLE EJERCICIO&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var tags = document.querySelectorAll('h1,h2,h3,h4,h5,h6,div,p');&lt;br /&gt;
for (var i = tags.length - 1; i &amp;gt;= 0; i--) {&lt;br /&gt;
  tags[i].style.outline = &amp;quot;1px solid green&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validar un camp de text Obligatori ===&lt;br /&gt;
Es tracta de forçar l'usuari a introduir un valor en un quadre de text o textarea en què sigui obligatori.Perquè es doni per completat un camp de text obligatori, es comprova que el valor introduït sigui vàlid, que el nombre de caràcters introduït sigui més gran que zero i que no s'hagin introduït només espais en blanc.  El text introduït tingui una longitud superior a zero caràcters, és a dir, que no sigui un text buit i per últim, el valor introduït per l'usuari no només estigui format per espais en blanc.&lt;br /&gt;
&lt;br /&gt;
:[[solució_valor_quadre_text]]&lt;br /&gt;
&lt;br /&gt;
=== Validar un camp de text amb valors numèrics ===&lt;br /&gt;
Es tracta d'obligar l'usuari a introduir un valor numèric en un quadre de text.&lt;br /&gt;
:[[solucio_camp_text]]&lt;br /&gt;
&lt;br /&gt;
===  Validar que s'ha seleccionat una opció d'una llista ===&lt;br /&gt;
Es tracta d'obligar l'usuari a seleccionar un element d'una llista desplegable.&lt;br /&gt;
:[[solucio_llista]]&lt;br /&gt;
&lt;br /&gt;
=== Validar una adreça de correu electrònic ===&lt;br /&gt;
Es tracta d'obligar l'usuari a introduir una adreça de correu amb un format vàlid. Per tant, el que es comprova és que la direcció sembli vàlida, ja que no es comprova si es tracta d'un compte de correu electrònic real i operativa. La comprovació es realitza novament mitjançant les expressions regulars, ja que les adreces de correu electrònic vàlides poden ser molt diferents.&lt;br /&gt;
:[[solucio_correu_electronic]]&lt;br /&gt;
&lt;br /&gt;
=== Validar una data ===&lt;br /&gt;
Les dates solen ser els camps de formulari més complicats de validar per la multitud de formes diferents en què es poden introduir.&lt;br /&gt;
:[[solucio_dates]]&lt;br /&gt;
&lt;br /&gt;
=== Validar un número de DNI ===&lt;br /&gt;
Es tracta de comprovar que el nombre proporcionat per l'usuari es correspon amb un nombre vàlid de document nacional d'identitat o DNI. Encara que per cada país o regió els requisits del document d'identitat de les persones poden variar, a continuació es mostra un exemple genèric fàcilment adaptable. La validació no només ha de comprovar que el nombre estigui format per vuit xifres i una lletra, sinó que també cal comprovar que la lletra indicada és correcta per al número introduït.&lt;br /&gt;
:[[solució_dni]]&lt;br /&gt;
&lt;br /&gt;
=== Validar un número de telèfon ===&lt;br /&gt;
Els números de telèfon poden ser indicats de formes molt diferents: amb prefix nacional, amb prefix internacional, agrupat per parells, separant els números amb guions, etc.&lt;br /&gt;
:[[solucio_telefon]]&lt;br /&gt;
&lt;br /&gt;
=== Validar que un checkbox ha estat seleccionat ===&lt;br /&gt;
*a)Es tracta de validar si un element de tipus checkbox s'ha de seleccionar de forma obligatòria. &lt;br /&gt;
*b)Es tracta de validar si tots els checkbox del formulari han estat seleccionats.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_checkbox]]&lt;br /&gt;
&lt;br /&gt;
=== Validar que un radiobutton ha estat seleccionat ===&lt;br /&gt;
Encara que es tracta d'un cas similar al dels checkbox, la validació dels radiobutton presenta una diferència important: en general, la comprovació que es realitza és que l'usuari hagi seleccionat algun radiobutton dels que formen un determinat grup.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_radiobutton]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;JavaScript RegExp Reference: https://www.w3schools.com/jsref/jsref_obj_regexp.asp&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Experiments amb Expresions Regulars: http://www.regexplanet.com/advanced/javascript/index.html &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;John Resig, Bear Bibeault, &amp;quot;Secrets of the Javascript Ninja&amp;quot;, Manning Publications, 2012. ISBN 193398869X&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[http://librosweb.es/javascript/capitulo_7.html Introducció a Javascript] &amp;lt;/p&amp;gt; &amp;lt;p&amp;gt; [https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions Expressions Regulars a Mozilla]&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_Estructures_definides_pel_Programador_-_Objectes&amp;diff=19108</id>
		<title>NF1 - Estructures definides pel Programador - Objectes</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_Estructures_definides_pel_Programador_-_Objectes&amp;diff=19108"/>
				<updated>2025-11-11T14:34:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectes =&lt;br /&gt;
== Instanciació d'objectes==&lt;br /&gt;
&lt;br /&gt;
La forma més sencilla de crear un nou objecte és amb una intrucció com aquesta :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
var obj2 = {};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això crea un objecte nou, buit i que més tard podem ampliar amb propietats:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var o = {};&lt;br /&gt;
o.name = &amp;quot;Marta&amp;quot;;&lt;br /&gt;
o.feina = &amp;quot;contable&amp;quot;;&lt;br /&gt;
o.antiguitat = 11;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per eliminar una propietat podem utilitzar l'operador ''delete'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object()&lt;br /&gt;
alert(obj1.nombre)   // undefined&lt;br /&gt;
&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;&lt;br /&gt;
alert(obj1.nombre)   // &amp;quot;mundo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
delete obj1.nombre&lt;br /&gt;
&lt;br /&gt;
alert(obj1.nombre)   // undefined otra vez&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per afegir un mètode podem fer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;;&lt;br /&gt;
obj1.saluda = function() { alert(&amp;quot;hola &amp;quot;+this.nombre) };&lt;br /&gt;
obj1.saluda();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
També podem construir objectes de manera literal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = {nombre:&amp;quot;mundo&amp;quot;,&lt;br /&gt;
            saluda: function() { alert(&amp;quot;hola &amp;quot;+this.nombre) }&lt;br /&gt;
};&lt;br /&gt;
obj1.saluda();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I podem accedir als mètodes i a les propietats de diferents maneres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;;&lt;br /&gt;
obj1.saluda = function() { alert(&amp;quot;hola &amp;quot;+this.nombre) };&lt;br /&gt;
&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1.nombre);       // Acceso normal&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1[ &amp;quot;nombre&amp;quot; ]);  // Acceso indexado con un literal&lt;br /&gt;
var prop = &amp;quot;nombre&amp;quot;;&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1[ prop ]);      // Acceso indexado con una variable&lt;br /&gt;
&lt;br /&gt;
obj1.saluda();         // Invocación normal&lt;br /&gt;
obj1[ &amp;quot;saluda&amp;quot; ]();    // Acceso indexado con un literal&lt;br /&gt;
var func = &amp;quot;saluda&amp;quot;;&lt;br /&gt;
obj1[ func ]();        // Acceso indexado con una variable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mètodes privats'''&lt;br /&gt;
Aquesta part ja s'ha vist en el capitol de les funcions, però no està de més tornar a fer una ullada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*CREACIÓ CLASSES ECMASCRIP 5*/&lt;br /&gt;
&lt;br /&gt;
/*Ejemplo 1*/&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
	this.saluda = function() {&lt;br /&gt;
		alert(&amp;quot;hola &amp;quot;+plural(this.nombre))&lt;br /&gt;
	}&lt;br /&gt;
	function plural(n) {&lt;br /&gt;
		return n + &amp;quot;s&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.saluda()&lt;br /&gt;
// obj1.plural()  // fallaría porque plural() es privado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*Ejemplo 2*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Animal(nombre, especie, numerodepatas, tienecola) { &lt;br /&gt;
    //Variables privadas el guión &amp;quot;_&amp;quot; no significa que haga las variables privadas sino que por convenio se especifica&lt;br /&gt;
    var _nombreCompleto; &lt;br /&gt;
    var _color; &lt;br /&gt;
    // Propiedades &lt;br /&gt;
    this.Nombre = nombre; &lt;br /&gt;
    this.Especie = especie; &lt;br /&gt;
    this.NumeroDePatas = numerodepatas; &lt;br /&gt;
    this.TieneCola = tienecola; &lt;br /&gt;
    // Metodos &lt;br /&gt;
    this.setColor = function (color) { &lt;br /&gt;
        _color = color; &lt;br /&gt;
    } &lt;br /&gt;
    this.getColor = function () { &lt;br /&gt;
        return _color; &lt;br /&gt;
    } &lt;br /&gt;
    this.setNombreCompleto = function() { &lt;br /&gt;
        _nombreCompleto = &amp;quot;Este Animal es un &amp;quot; + this.Nombre + &amp;quot; de la especie de los &amp;quot; + this.Especie; &lt;br /&gt;
    } &lt;br /&gt;
    this.getNombreCompleto = function() { &lt;br /&gt;
        this.setNombreCompleto(); &lt;br /&gt;
        return _nombreCompleto; &lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Els que venim d'un entorn orientat a objectes clàssic trobaran a faltar la encapsulació i la estructuració que implica el concepte de constructor de classe.&lt;br /&gt;
Javascript proporciona aquest mecanisme però d'una manera molt diferent. En Javascript totes les funcions i els objectes tenen una propietat anomenada ''prototype'' que fa referència a un objecte buit de forma inicial. Aquest objecte buit es crea utilitzant la paraula ''new''.&lt;br /&gt;
&lt;br /&gt;
==CREACIÓ CLASSES ECMASCRIPT 6==&lt;br /&gt;
&lt;br /&gt;
'''MÉTODOS ESTÁTICOS'''&lt;br /&gt;
&lt;br /&gt;
En algunos casos, nos puede interesar crear métodos estáticos en una clase porque para utilizarlos no hace falta crear ese objeto, sino que se pueden ejecutar directamente sobre la clase directamente.&lt;br /&gt;
&lt;br /&gt;
Una de las limitaciones de los métodos estáticos es que en su interior sólo podremos hacer referencia a elementos que también sean estáticos.&lt;br /&gt;
&lt;br /&gt;
No podremos acceder a propiedades o métodos no estáticos, ya que necesitaríamos instanciar un objeto para hacerlo.&lt;br /&gt;
&lt;br /&gt;
Los métodos estáticos se suelen utilizar para crear funciones de apoyo que realicen tareas concretas o genéricas, porque están relacionadas &lt;br /&gt;
con la clase en general.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Animal {&lt;br /&gt;
  static despedirse() {&lt;br /&gt;
    return &amp;quot;Adiós&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Animal.despedirse(); // 'Adiós'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las clases, siendo estructuras para guardar información, pueden guardar variables con su correspondiente información. &lt;br /&gt;
Dicho concepto se denomina propiedades y en Javascript se realiza en el interior del constructor, precedido de la palabra clave this (que hace referencia a «este» elemento, es decir, la clase).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Animal {&lt;br /&gt;
  constructor(n = &amp;quot;pato&amp;quot;) {&lt;br /&gt;
    this.nombre = n;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  quienSoy() {&lt;br /&gt;
    return &amp;quot;Hola, soy &amp;quot; + this.nombre;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Creación de objetos&lt;br /&gt;
const pato = new Animal();&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy pato'&lt;br /&gt;
&lt;br /&gt;
const donald = new Animal(&amp;quot;Donald&amp;quot;);&lt;br /&gt;
donald.quienSoy(); // 'Hola, soy Donald'&lt;br /&gt;
&lt;br /&gt;
/*las propiedades de la clase podrán ser modificadas externamente, ya que por defecto son propiedades públicas*/&lt;br /&gt;
pato.nombre = &amp;quot;Paco&amp;quot;;&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy Paco'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Propiedades y métodos privados'''&lt;br /&gt;
&lt;br /&gt;
A partir de la versión ECMAScript 2020, se introduce la posibilidad de crear campos de clase privados (los cuales aún cuentan con poco soporte).&lt;br /&gt;
&lt;br /&gt;
Antiguamente todas las propiedades y métodos eran públicos por defecto, pero ahora también pueden ser privados. &lt;br /&gt;
Para ello, solo hay que añadir el carácter # justo antes del nombre de la propiedad o método.&lt;br /&gt;
&lt;br /&gt;
Estas propiedades o métodos precedidos de # son privados y sólo podrán ser llamados desde un método de clase, &lt;br /&gt;
ya que si se hace desde fuera obtendremos un error.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, si se llama a un método público como decirSacrilegio(), que a su vez llama a un método privado &lt;br /&gt;
(pero desde dentro de la clase), todo funcionará correctamente sin error, ya que el método #decirSecreto() &lt;br /&gt;
se está llamando desde dentro de la clase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Animal {&lt;br /&gt;
  #miSecreto = &amp;quot;Me gusta Internet Explorer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  #decirSecreto() {&lt;br /&gt;
    return this.#miSecreto;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  decirSacrilegio() {&lt;br /&gt;
    return this.#decirSecreto();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const patitoFeo = new Animal();&lt;br /&gt;
patitoFeo.#decirSecreto();     // Error&lt;br /&gt;
patitoFeo.decirSacrilegio();   // OK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consulta la compatibilitat de mètodes privats a: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields&lt;br /&gt;
&lt;br /&gt;
'''Ámbitos de en una clase'''&lt;br /&gt;
&lt;br /&gt;
Dentro de una clase tenemos dos tipos de ámbitos: '''ámbito de método y ámbito de clase''':&lt;br /&gt;
&lt;br /&gt;
1)En primer lugar, veamos el '''ámbito dentro de un método'''. Si declaramos variables o funciones dentro de un método con ''var, let o const'', &lt;br /&gt;
''estos elementos existirán sólo en el método en cuestión.'' Además, no serán accesibles desde fuera del método.&lt;br /&gt;
&lt;br /&gt;
Observa que la variable name solo se muestra cuando se hace referencia a ella dentro del constructor() que es donde se creó y donde existe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Clase {&lt;br /&gt;
  constructor() {&lt;br /&gt;
    const name = &amp;quot;Manz&amp;quot;;&lt;br /&gt;
    console.log(&amp;quot;Constructor: &amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  metodo() {&lt;br /&gt;
    console.log(&amp;quot;Método: &amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const c = new Clase(); // 'Constructor: Manz'&lt;br /&gt;
&lt;br /&gt;
c.name; // undefined&lt;br /&gt;
c.metodo(); // 'Método: '&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) En segundo lugar, tenemos '''el ámbito de clase'''. Podemos crear propiedades precedidas por this. (desde dentro del constructor) y &lt;br /&gt;
desde ES2020 desde la parte superior de la clase, ''lo que significa que estas propiedades tendrán alcance en toda la clase, &lt;br /&gt;
tanto desde el constructor, como desde otros métodos del mismo.&lt;br /&gt;
&lt;br /&gt;
Ojo, estas propiedades también pueden ser modificadas desde fuera de la clase, simplemente asignándole otro valor.''&lt;br /&gt;
Si quieres evitarlo, añade el # antes del nombre de la propiedad al declararla (ejemplo #role).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Clase {&lt;br /&gt;
  role = &amp;quot;Teacher&amp;quot;;   // ES2020+&lt;br /&gt;
&lt;br /&gt;
  constructor() {&lt;br /&gt;
    this.name = &amp;quot;Manz&amp;quot;;&lt;br /&gt;
    console.log(&amp;quot;Constructor: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  metodo() {&lt;br /&gt;
    console.log(&amp;quot;Método: &amp;quot; + this.name + this.role);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const c = new Clase(); // 'Constructor: Manz'&lt;br /&gt;
&lt;br /&gt;
c.name;     // 'Manz'&lt;br /&gt;
c.metodo(); // 'Método: Manz'&lt;br /&gt;
c.role;     // 'Teacher'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''La palabra clave this'''&lt;br /&gt;
&lt;br /&gt;
Como te habrás fijado en ejemplos anteriores, hemos introducido la palabra clave this, que hace referencia al elemento padre que la contiene.&lt;br /&gt;
&lt;br /&gt;
Así pues, si escribimos this.nombre dentro de un método, estaremos haciendo referencia a la propiedad nombre que existe dentro de ese objeto.&lt;br /&gt;
&lt;br /&gt;
De la misma forma, si escribimos this.hablar() estaremos ejecutando el método hablar() de ese objeto.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que si usas this en contextos concretos, como por ejemplo fuera de una clase te devolverá el objeto Window, &lt;br /&gt;
que no es más que una referencia al objeto global de la pestaña actual donde nos encontramos y tenemos cargada la página web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Animal {&lt;br /&gt;
  constructor(n = &amp;quot;pato&amp;quot;) {&lt;br /&gt;
    this.nombre = n;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  quienSoy() {&lt;br /&gt;
    return &amp;quot;Hola, soy &amp;quot; + this.nombre + &amp;quot;. ~&amp;quot; + this.hablar();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const pato = new Animal(&amp;quot;Donald&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy Donald. ~Cuak'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EJEMPLO CLASE CON GETTERS y SETTERS'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Para crear una clase se usa la palabra reservada 'class'&lt;br /&gt;
                 class Persona {&lt;br /&gt;
			/* El método 'constructor' se utiliza para inicializar los atributos&lt;br /&gt;
			 * de la clase.&lt;br /&gt;
			 *&lt;br /&gt;
			 * Observar que se pueden especificar valores por defecto a los perámetros.&lt;br /&gt;
			 *  - Se pasa el valor por defecto 'conocido' a 'tipoSaludo'.&lt;br /&gt;
			 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			constructor(nombre, edad, email, tipoSaludo = 'conocido') {&lt;br /&gt;
				// Para hacer referencia a las propiedades del objeto se utiliza la&lt;br /&gt;
				// palabra reservada 'this'.&lt;br /&gt;
				this._nombre = nombre;&lt;br /&gt;
				this._edad = edad;&lt;br /&gt;
				this._email = email;&lt;br /&gt;
				this._tipoSaludo = tipoSaludo;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Se pueden crear los getter con la palabra reservada 'get'.&lt;br /&gt;
			// Los getter sirven para obtener los valores de las propiedades&lt;br /&gt;
			// del objeto.&lt;br /&gt;
			get nombre() {&lt;br /&gt;
				return this._nombre;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Se pueden crear los setter con la palabra reservada 'set'.&lt;br /&gt;
			// Los setter sirven para asignar nuevos valores a las propiedades&lt;br /&gt;
			// del objeto.&lt;br /&gt;
			set tipoSaludo(tipoSaludo) {&lt;br /&gt;
				this._tipoSaludo = tipoSaludo;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			// Para crear un método simplemente se define su nombre&lt;br /&gt;
			saludar(nombre) {&lt;br /&gt;
&lt;br /&gt;
				if (this._tipoSaludo === 'conocido')&lt;br /&gt;
					console.log(`Hola ${nombre}, ¿Cómo estas?`);&lt;br /&gt;
				else&lt;br /&gt;
					console.log(`Hola, mi nombre es ${this._nombre}`);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			/* En algunas ocaciones se puede dar el caso de que no podemos tener&lt;br /&gt;
			 * acceso a nuestro objeto, la solución a este inconveniente se muestra&lt;br /&gt;
			 * y explica en este método.&lt;br /&gt;
			 */&lt;br /&gt;
			mostrarme() {&lt;br /&gt;
				// Declarando una variable local y asignándole una referencia al propio&lt;br /&gt;
				// objeto.&lt;br /&gt;
				let _this = this;&lt;br /&gt;
				// En una función anónima no se puede acceder al propio objeto usando&lt;br /&gt;
				// la palabra reservada 'this' (obtenemos como salida 'undefined').&lt;br /&gt;
				(function () {&lt;br /&gt;
					console.log(this);&lt;br /&gt;
				})();&lt;br /&gt;
				// Una solución es declarar una variable y asignarle una referencia&lt;br /&gt;
				// al objeto como se hace al inicio del método.&lt;br /&gt;
				(function () {&lt;br /&gt;
					console.log(_this);&lt;br /&gt;
				})();&lt;br /&gt;
				// Esta es la manera correcta y elegante de acceder a nuestro objeto.&lt;br /&gt;
				((e) =&amp;gt; {&lt;br /&gt;
					console.log(this);&lt;br /&gt;
				})();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Los métodos estáticos se declaran usando la palabra reservada 'static'.&lt;br /&gt;
			static girar() {&lt;br /&gt;
				console.log('Girando!');&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
            // Para crear una instancia de la clase 'Persona' se usa la &lt;br /&gt;
            // palabra reservada 'new'. Recordar que el cuarto parámetro &lt;br /&gt;
            //es opcional, por lo que al no pasarle valor tomara por &lt;br /&gt;
            //defecto el especificado en el método 'constructor' de la clase.&lt;br /&gt;
            var p = new Persona('Julio', 30, 'juliolamerce@gmail.com');&lt;br /&gt;
            // Llamando a uno de sus métodos.&lt;br /&gt;
            p.saludar('Ana');&lt;br /&gt;
            // Cambiando el valor del atributo 'tipoSaludo' usando el setter tipoSaludo&lt;br /&gt;
            p.tipoSaludo = 'otro';&lt;br /&gt;
            p.saludar();&lt;br /&gt;
            // Obtenieno el valor del atributo 'nombre' usando el getter nombre&lt;br /&gt;
            console.log(p.nombre);&lt;br /&gt;
            // Ejemplo del acceso al propio objeto y la mejor forma de hacerlo, en&lt;br /&gt;
            // circunstancias como: los eventos, funciones anónimas, uso de JQuery dentro&lt;br /&gt;
            // del método, etc.&lt;br /&gt;
            p.mostrarme();&lt;br /&gt;
            &lt;br /&gt;
            // Un método estático no necesita de una instacia de clase para ser invocado.&lt;br /&gt;
            Persona.girar();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://lenguajejs.com/javascript/caracteristicas/clases-es6/&lt;br /&gt;
&lt;br /&gt;
== Herència  ==&lt;br /&gt;
&lt;br /&gt;
'''ECMAScript 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Persona {  &lt;br /&gt;
  // constructor donde definir las variables que se reciben y guardarlas en el objeto usando this&lt;br /&gt;
  constructor(nombre, edad) {&lt;br /&gt;
    this.nombre = nombre;&lt;br /&gt;
    this.edad   = edad;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // método para presentarse&lt;br /&gt;
  presentarse() {&lt;br /&gt;
    return 'Hola me llamo ' + this.nombre + ' y tengo ' + this.edad + ' años';&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
   get verNombre() {&lt;br /&gt;
    return this.nombre;&lt;br /&gt;
  }&lt;br /&gt;
  set nuevoNombre(nuevo) {&lt;br /&gt;
    this.nombre = nuevo;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//var persona = new Persona('Julio', 22);  &lt;br /&gt;
//persona.presentarse();  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Desarrollador extends Persona {  &lt;br /&gt;
  constructor(nombre, edad, cargo) {&lt;br /&gt;
    super(nombre, edad);&lt;br /&gt;
    this.cargo = cargo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  presentarse() {&lt;br /&gt;
    return super.presentarse() + ' y soy desarrollador ' + this.cargo;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var persona = new Desarrollador('Julio', 22, 'Frontend');  &lt;br /&gt;
persona.presentarse(); // 'Hola me llamo Julio y tengo 22 años y soy desarrollador Frontend'  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://lenguajejs.com/javascript/caracteristicas/herencia-de-clases/&lt;br /&gt;
&lt;br /&gt;
https://platzi.com/blog/ecmascript-nueva-sintaxis/&lt;br /&gt;
&lt;br /&gt;
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ECMAScript 5 Herència amb prototips'''&lt;br /&gt;
&lt;br /&gt;
Analitzarem l'us de la paraula ''new'' a una funció i veurem com la propietat ''prototype'' proporciona propietats per a la nova instància.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
&lt;br /&gt;
Persona.prototype.caminar = function(){return true;};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var pere = Persona();&lt;br /&gt;
assert(pere === undefined, &amp;quot;No s'ha creat cap instancia de Persona&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
var jaume = new Persona();&lt;br /&gt;
&lt;br /&gt;
assert(jaume &amp;amp;&amp;amp; jaume.caminar &amp;amp;&amp;amp; jaume.caminar(), &amp;quot;La instancia existeix i el mètode es pot cridar&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem veure en l'exemple anterior que pere te el valor ''undefined''. Aixó és així per que la funció Persona, si no es crida amb el constructor ''new'' no retorna cap valor.&lt;br /&gt;
Veiem que és veritat, ja que quan el cridem amb el constructor ''new'' Jaume existeix i a més a més té un mètode anomenat ''caminar''.&lt;br /&gt;
&lt;br /&gt;
=== Llavors, què és un prototip?? ===&lt;br /&gt;
&lt;br /&gt;
Un prototype és un objecte del que altres objectes hereten propietats.Aquest objecte pot ser qualsevol objecte.&lt;br /&gt;
L'herència basada en classes no existeix en Javascript, sinó que és herència basada en prototips. Això significa que no hi ha una jerarquia de classes real (amb la seva extends, accés super, etc.), sinó que cada ''classe'' té un objecte de referència (com si fos la seva classe pare) on consultar atributs i mètodes en cas que la nostra classe no els trobi. Podem intentar simular una jerarquia (ull, simular) usant aquests objectes de referència, anomenats prototips, amb una propietat especial que tenen totes les “classes” anomenada prototype. Aquesta propietat és asignable i la seva labor consisteix a guardar un objecte. Vegem-ho amb un exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
	this.saluda = function() {&lt;br /&gt;
		alert(&amp;quot;hola &amp;quot;+this.nombre)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
// Añade un objeto al prototipo&lt;br /&gt;
Saludator.prototype = {&lt;br /&gt;
	apellido: &amp;quot;cruel&amp;quot;,&lt;br /&gt;
	despide: function() {&lt;br /&gt;
		alert(&amp;quot;adios &amp;quot;+this.nombre+&amp;quot; &amp;quot;+this.apellido)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.despide() // &amp;quot;adios mundo cruel&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Quins objectes tenen prototip? ====&lt;br /&gt;
&lt;br /&gt;
Tot objecte té un prototip per defecte. Com els prototips són objectes, tots ells tenen un prototip també. Solament hi ha una excepció: el prototip de l'objecte per defecte, al final de la cadena de prototips (Object).&lt;br /&gt;
&lt;br /&gt;
Totes les classes tenen per defecte un objecte prototype buit, com si en crear-les es fes prototype = {}. Per aquesta raó, podem accedir a aquesta variable i assignar-li els atributs d'un en un. El següent exemple és completament equivalent a l'anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
}&lt;br /&gt;
// Añade nuevas propiedades al prototipo&lt;br /&gt;
Saludator.prototype.apellido = &amp;quot;cruel&amp;quot;&lt;br /&gt;
Saludator.prototype.despide = function() {&lt;br /&gt;
	alert(&amp;quot;adios &amp;quot;+this.nombre+&amp;quot; &amp;quot;+this.apellido)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.despide() // &amp;quot;adios mundo cruel&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ok, recapitulem… què deies que era un objecte?&lt;br /&gt;
&lt;br /&gt;
Un objecte en Javascript és una col·lecció qualsevol de parells clau-valor. Si no és un valor primitiu (undefined, null, boolean, number o string) és un objecte.&lt;br /&gt;
&lt;br /&gt;
=== Utilitzant Prototips ===&lt;br /&gt;
&lt;br /&gt;
Estudia aquest codi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = false;&lt;br /&gt;
	this.caminar = function(){return !this.parat;};&lt;br /&gt;
}&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
&lt;br /&gt;
console.log(joan.caminar()); //La crida a caminar és la crida definida dintre de Persona i no al mètode del prototip&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això demostra que el membres de la instància creats dintre del constructor bloquejaran les propietats i els mètodes definits amb el mateix nom en el prototip.&lt;br /&gt;
&lt;br /&gt;
=== Com abordar les referències als mètodes i propietats dels prototips ===&lt;br /&gt;
&lt;br /&gt;
Amb els exemples vistos anteriorment, pots arribar a pensar que quan es crea un nou objecte es copien els valors i els mètodes del seu prototip, i si hi ha algún mètode o propietat que s'anomena igual, es sobreescriu el seu valor amb el valor que hi ha en el constructor de l'objecte.&lt;br /&gt;
Si fos així, en el següent codi, el mètode caminar no es podria utilitzar :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = true;&lt;br /&gt;
}&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&lt;br /&gt;
assert(joan.caminar(), &amp;quot;El mètode existeix, fins i tot quan la persona s'ha creat abans.&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Llavors, aixó demostra que no hi ha una copia de propietats si no molt més.&lt;br /&gt;
El que succeeix es que les funcions i mètodes del prototip  s'adjunten a l'objecte construït i es consulta durant la conciliació de les referències de la propietat que es duen a terme en l'objecte. És a dir:&lt;br /&gt;
&lt;br /&gt;
* 1. Quan es fa una referència de propietat a un objecte, es comprova a veure si existeix en el propi objecte, si existeix s'agafa el valor, si no...&lt;br /&gt;
* 2. Es localitza el prototip associat al objecte i es comprova si existeix la propietat, Si existeix es retorna el valor, si no...&lt;br /&gt;
* 3. El valor es ''undefined''&lt;br /&gt;
&lt;br /&gt;
Llavors podem dir que els mètodes i les propietats NO ES COPIEN,  S'ADJUNTEN de forma activa al objecte.&lt;br /&gt;
&lt;br /&gt;
=== Funció constructor d'un objecte ===&lt;br /&gt;
Tots els objectes tenen una referència a la funció que s'ha utilitzat per construir l'objecte. Aquesta propietat s'anomena ''constructor''. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = true;&lt;br /&gt;
}&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En aquest cas ''joan.constructor'' fa referència a la funció ''Persona()''. Sabem que les funcion son objectes, per tant, aquesta funció té propietats. Una de elles és la propietat ''prototype''.&lt;br /&gt;
Per tant, podem accedir a les propietats i mètodes del prototype des del mateix objecte: ''joan.constructor.prototype.caminar''.&lt;br /&gt;
&lt;br /&gt;
=== Herència amb Prototips ===&lt;br /&gt;
&lt;br /&gt;
Volem crear hereència entre diferents objectes. Analitza el següent codi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = { ballar : Persona.prototype.ballar};    //fa refència a ballar del mètode de Persona&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();&lt;br /&gt;
console.log(joan instanceof Alumne);     //true&lt;br /&gt;
console.log(joan instanceof Persona);    //false&lt;br /&gt;
console.log(joan instanceof Object);     //true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creus que està ben aconseguida la herència? Prova-ho.&lt;br /&gt;
D'aquesta manera estem copiant la funció ''ballar'' definida en Persona en Alumne. ''Però no estem creant herència, estem copiant funcions.''&lt;br /&gt;
Llavors quina tècnica s'utilitza??&lt;br /&gt;
&lt;br /&gt;
El que volem crear és una cadena de prototips per tal que ''Alumne'' pugui ser una ''Persona'' i aquesta a la seva vegada un ''Mamífer'' i aquesta una ''Animal'' i així fins arribar a ''Object''.&lt;br /&gt;
La millor manera de fer-ho és '''utilitzant una instància d'objecte com a prototip'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Subclass.prototype = new SuperClass();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'exemple anterior quedaria de la següent manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();          //joan apuntaria a Persona i executaria el mètode de ballar de Persona&lt;br /&gt;
&lt;br /&gt;
console.log(joan instanceof Alumne);      //true    &amp;quot;joan és un alumne&amp;quot;&lt;br /&gt;
console.log(joan instanceof Persona);     //true    &amp;quot;joan és una Persona&amp;quot; &lt;br /&gt;
console.log(joan instanceof Object);      //true    &amp;quot;joan és una Objecte&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Casi casi ho hem aconseguit. L'unic problema es que hem perdut la referència al nostre propi constructor. ''joan.constructor'' apunta a ''Persona'' en compte d'apuntar a ''Alumne''. Com ho solucionem?? fàcil:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
Alumne.prototype.constructor = Alumne;&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();&lt;br /&gt;
&lt;br /&gt;
console.log(joan instanceof Alumne);      //true&lt;br /&gt;
console.log(joan instanceof Persona);     //true&lt;br /&gt;
console.log(joan instanceof Object);      //true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dibuix amb la cadena de prototips:&lt;br /&gt;
[[Fitxer:cadena_de_prototips.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Exemple d'herència amb prototips ===&lt;br /&gt;
&lt;br /&gt;
Exemple de herència :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// define la clase Person&lt;br /&gt;
function Person() {}&lt;br /&gt;
&lt;br /&gt;
Person.prototype.walk = function(){};&lt;br /&gt;
Person.prototype.sayHello = function(){  alert ('hola');};&lt;br /&gt;
&lt;br /&gt;
// define la clase Student&lt;br /&gt;
function Student() {&lt;br /&gt;
  // Llama al constructor primario&lt;br /&gt;
  Person.call(this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// hereda Person&lt;br /&gt;
Student.prototype = new Person();&lt;br /&gt;
&lt;br /&gt;
// corrige el puntero del constructor porque apunta a Person&lt;br /&gt;
Student.prototype.constructor = Student;&lt;br /&gt;
 &lt;br /&gt;
// reemplaza el método sayHello&lt;br /&gt;
Student.prototype.sayHello = function(){&lt;br /&gt;
  alert ('hola, soy estudiante');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// agrega el método sayGoodBye&lt;br /&gt;
Student.prototype.sayGoodBye = function(){&lt;br /&gt;
  alert ('adiós');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var student1 = new Student();&lt;br /&gt;
student1.sayHello();&lt;br /&gt;
student1.sayGoodBye();&lt;br /&gt;
&lt;br /&gt;
// comprueba la herencia&lt;br /&gt;
alert(student1 instanceof Person); // true  &lt;br /&gt;
alert(student1 instanceof Student); // true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Altre Exemple:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Padre(attPadre) {&lt;br /&gt;
   this.atributoPadre=attPadre;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function Hijo(attHijo, attPadre) {&lt;br /&gt;
   Padre.call(this,attPadre);&lt;br /&gt;
   this.atributoHijo=attHijo;&lt;br /&gt;
}&lt;br /&gt;
Hijo.prototype = new Padre();&lt;br /&gt;
 &lt;br /&gt;
a = new Hijo(2,3);&lt;br /&gt;
alert (a.atributoPadre);&lt;br /&gt;
alert (a.atributoHijo);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exercici clase TEXT ==&lt;br /&gt;
&lt;br /&gt;
Crea una classe TEXT que permeti :&lt;br /&gt;
* Definir una cadena de caràcters inicialitzada pel constructor&lt;br /&gt;
* Afegir caràcters&lt;br /&gt;
* Saber quantes vocals hi ha en el text&lt;br /&gt;
* Mostrar el text&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio classe text]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercici Figures ==&lt;br /&gt;
&lt;br /&gt;
*Tenemos una clase padre Figura que recibe como parámetro un color, y tienen sus get y set y un método que muestra la info(color).&lt;br /&gt;
&lt;br /&gt;
*La clase Cuadrado Hereda de Figura, recibe color y lado, tiene sus get y set, dos métodos calculaArea y muestra info(color,lado y área).&lt;br /&gt;
&lt;br /&gt;
*La clase Rectángulo hereda de Figura, recibe color, base, altura, tiene sus get y set, dos métodos calcularArea y muestra info(color, base, altura y área).&lt;br /&gt;
&lt;br /&gt;
*La clase Triangulo herede de Rectángulo, recibe color, base, altura, tiene sus get y set, un método que muestra toda la info (color,base, altura y área) &lt;br /&gt;
&amp;lt;!-- Comentat Monica&lt;br /&gt;
:[[sol_figuras_herencia]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Joc de Rol ==&lt;br /&gt;
&lt;br /&gt;
Es vol programar un joc de rol, del que ens han encarregat programar en JavaScript l'esquema dels personatges. Així que ens han donat les següents directrius:&lt;br /&gt;
* S'ha de programar 2 tipus de personatges: Els mags i els monjos.&lt;br /&gt;
* Tots els personatges tenen les següents dades:&lt;br /&gt;
** Nom : una cadena&lt;br /&gt;
** Raça : Pot pendre els següents valors: Humà, Elf, Nan, Orco&lt;br /&gt;
** Força : entre 0 i 20&lt;br /&gt;
** Inteligència : entre 0 i 20&lt;br /&gt;
** Punts de vida màxims : entre 0 i 100&lt;br /&gt;
** Punts de vida actuals : entre 0 i punts de vida màxims&lt;br /&gt;
* Cada personatge té atributs i restriccions específics que es detallen en els següents apartats:&lt;br /&gt;
&lt;br /&gt;
'''Apartat a : Personatge''' &lt;br /&gt;
Escriu la classe Personatge que reuneixi tots els atributs mencionats a l'enunciat. Pe fer-ho implementa:&lt;br /&gt;
* Un constructor que inicialitzi els atributs.&lt;br /&gt;
* Mètodes afegir i aconseguir per a tots els atributs de la classe&lt;br /&gt;
* Mètode imprimeix que mostri per pantalla les dades del personatge.&lt;br /&gt;
&lt;br /&gt;
'''Apartat b : Mag'''&lt;br /&gt;
Escriu la classe mag tenint en compte :&lt;br /&gt;
* Quan es crei un mag no pot tenir una inteligència menor que 17 ni una força mayor que 15.&lt;br /&gt;
* Un mag emmagatzema els noms del encanteris que ha memoritzat. Un mag normal només pot memoritzar 4 encanteris.&lt;br /&gt;
* Crea un mètode anomenat aprenEncanteri que reb un String i memoritza l'encanteri&lt;br /&gt;
* Crea un mètode anomenat llençaEncanteri que reb un parametre que serà un Objecte Personatge que és a qui recau l'encanteri. S'ha de restar 10 punts de vida d'aquest personatge i després s'ha d'esborrar l'encanteri.&lt;br /&gt;
* Escriu el constructor de la classe &lt;br /&gt;
* Escriu el mètode imprimeix per tal que es mostrin les noves dades del personatge&lt;br /&gt;
&lt;br /&gt;
'''Apartat c : Monjo'''&lt;br /&gt;
Escriu la classe Monjo tenint en compte :&lt;br /&gt;
* Quan es crei un monjo no pot tenir una inteligència menor que 12 ni mayor que 16 ni una força menor que 18.&lt;br /&gt;
* Un monjo reça a un Déu. Per tant, s'ha de modificar el constructor per tal que accepti el nom del Déu del que és devot.&lt;br /&gt;
* Un monjo pot curar, per tant, crea un mètode anomentat sanar que reb un personatge i aquest personatge reb 10 punts de vida.&lt;br /&gt;
* Escriu el mètode imprimeix per tal que es mostrin les noves dades del personatge&lt;br /&gt;
&lt;br /&gt;
'''Apartat d : Programa Principal''' &lt;br /&gt;
Crea el programa principal on es crein 2 mags (A,B) i un monjo (C) i realitza les següents accions:&lt;br /&gt;
* Imprimeix les dades dels tres personatges.&lt;br /&gt;
* El mag A aprén 2 encanteris.&lt;br /&gt;
* El mag B aprén 1 encanteri.&lt;br /&gt;
* Imprimeix les dades dels mags.&lt;br /&gt;
* El mag A llença un encanteri sobre el mag B&lt;br /&gt;
* El mag B llença un encanteri sobre el mag A&lt;br /&gt;
* El monjo cura al mag B.&lt;br /&gt;
* El mag A llença un encanteri sobre el mag B.&lt;br /&gt;
* Imprimeix les dades dels tres personatges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[Solucio joc Rol]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercici PROFESSORS==&lt;br /&gt;
Crea una classe Persona, que contingui les dades nom, cognoms i edat, es podrà obtenir i modificicar els valors.&lt;br /&gt;
Es haurà de crear una altra classe Professor que baixarà de la classe Persona.&lt;br /&gt;
&lt;br /&gt;
També hi ha una classe ProfessorFixe que heretarà les dades de Professor, a més rebrà com a paràmetre un identificador.&lt;br /&gt;
&lt;br /&gt;
També hi ha una classe ProfessorInteri que heretarà les dades de Professor, a més rebrà com a paràmetre la data que demana l'interinatge.&lt;br /&gt;
&lt;br /&gt;
S'haurà de crear un mètode que mostre les dades de tots els objectes creats. (Nom, cognoms, id, data ...)&lt;br /&gt;
&lt;br /&gt;
S'haurà de crear una classe ListaProfe que contindrà un array on s'aniran emmagatzemant els objectes de ProfeFixe, ProfeInteri i Profes per això hi ha d'haver un mètode insertarProfe i un altre obtenerProfe i per últim mostrarProfes&lt;br /&gt;
&lt;br /&gt;
Insertar 3 profesInteri, 3 profesFixe i 3 Professors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[Solucio Profes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solució als Exercicis ==&lt;br /&gt;
&lt;br /&gt;
'''Exercici TEXT'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;&lt;br /&gt;
		Classe TEXT&lt;br /&gt;
	&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		class TEXT {&lt;br /&gt;
			#text;&lt;br /&gt;
			constructor(_text){&lt;br /&gt;
				this.#text=_text;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			afegir(_text) {&lt;br /&gt;
				this.#text+=_text;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			comptaVocals() {&lt;br /&gt;
&lt;br /&gt;
				var esVocal=function(c){&lt;br /&gt;
					return c==&amp;quot;a&amp;quot; || c==&amp;quot;e&amp;quot; || c==&amp;quot;i&amp;quot; || c==&amp;quot;o&amp;quot; || c==&amp;quot;u&amp;quot;;&lt;br /&gt;
				};&lt;br /&gt;
&lt;br /&gt;
				var array1=this.#text.split(&amp;quot;&amp;quot;);&lt;br /&gt;
				var array2=array1.filter(esVocal);&lt;br /&gt;
				return array2.length;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			get text(){&lt;br /&gt;
				return this.#text;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var text1=new TEXT(&amp;quot;Hola, que tal?&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;text:&amp;quot;+text1.text);&lt;br /&gt;
		text1.afegir(&amp;quot; bon dia&amp;quot;);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;text:&amp;quot;+text1.text);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;num vocals:&amp;quot;+text1.comptaVocals());&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici Figures'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;&lt;br /&gt;
		Exercici Figures&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		class Figura {&lt;br /&gt;
			#color;&lt;br /&gt;
			constructor(_color){&lt;br /&gt;
				this.#color=_color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get color(){&lt;br /&gt;
				return this.#color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set color(_color){&lt;br /&gt;
				this.#color=_color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			info(){&lt;br /&gt;
				return &amp;quot;color:&amp;quot;+this.#color;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		class Cuadrado extends Figura {&lt;br /&gt;
			#lado;&lt;br /&gt;
			constructor(_color,_lado) {&lt;br /&gt;
				super(_color);&lt;br /&gt;
				this.#lado=_lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get lado() {&lt;br /&gt;
				return this.#lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set lado(_lado) {&lt;br /&gt;
				this.#lado=_lado;&lt;br /&gt;
			}&lt;br /&gt;
			info(){&lt;br /&gt;
				return super.info()+&amp;quot;, lado:&amp;quot;+this.#lado+&amp;quot;, área:&amp;quot;+this.#lado*this.#lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		class Rectangulo extends Figura {&lt;br /&gt;
			#base;&lt;br /&gt;
			#altura;&lt;br /&gt;
			constructor(_color,_base,_altura) {&lt;br /&gt;
				super(_color);&lt;br /&gt;
				this.#base=_base;&lt;br /&gt;
				this.#altura=_altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get base() {&lt;br /&gt;
				return this.#base;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set base(_base) {&lt;br /&gt;
				this.#base=_base;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get altura() {&lt;br /&gt;
				return this.#altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set altura(_altura) {&lt;br /&gt;
				this.#altura=_altura;&lt;br /&gt;
			}&lt;br /&gt;
			info(){&lt;br /&gt;
				return super.info()+&amp;quot;, base:&amp;quot;+this.#base+&amp;quot;, altura:&amp;quot;+this.#altura+&amp;quot;, área:&amp;quot;+this.#base*this.#altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		class Triangulo extends Rectangulo {&lt;br /&gt;
			constructor(_color,_base,_altura) {&lt;br /&gt;
				super(_color,_base,_altura);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			info() {&lt;br /&gt;
				return &amp;quot;color: &amp;quot;+this.color+&amp;quot;, base: &amp;quot;+this.base+&amp;quot;, altura: &amp;quot;+this.altura+&amp;quot;, area: &amp;quot;+ this.base*this.altura/2;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var figura1=new Figura(&amp;quot;vermell&amp;quot;);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura1 info:&amp;quot;+figura1.info());&lt;br /&gt;
		&lt;br /&gt;
		figura2=new Cuadrado(&amp;quot;verd&amp;quot;,2);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura2 info:&amp;quot;+figura2.info());&lt;br /&gt;
		figura2.lado=6;&lt;br /&gt;
		figura2.color=&amp;quot;marró&amp;quot;;&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura2 info:&amp;quot;+figura2.info());&lt;br /&gt;
&lt;br /&gt;
		figura3= new Rectangulo(&amp;quot;blau&amp;quot;,3,4);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura3 info:&amp;quot;+figura3.info());&lt;br /&gt;
&lt;br /&gt;
		var figura4 = new Triangulo(&amp;quot;groc&amp;quot;,8,4);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 info: &amp;quot;+figura4.info());&lt;br /&gt;
		figura4.base=10;&lt;br /&gt;
		figura4.altura=20;&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 info: &amp;quot;+figura4.info());&lt;br /&gt;
&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Triangulo:&amp;quot;+ (figura4 instanceof Triangulo));		&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Rectangulo:&amp;quot;+ (figura4 instanceof Rectangulo));		&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Figura:&amp;quot;+ (figura4 instanceof Figura));&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura3 es Triangulo:&amp;quot;+ (figura3 instanceof Triangulo));&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&lt;br /&gt;
John Resig, Bear Bibeault, &amp;quot;Secrets of the Javascript Ninja&amp;quot;, Manning Publications, 2012. ISBN 193398869X&lt;br /&gt;
&lt;br /&gt;
[http://albertovilches.com/profundizando-en-javascript-parte-2-objetos-prototipos-herencia-y-namespaces  albertovilches]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/es/docs/Web msdn-firefox]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=428uJQjcJmg&lt;br /&gt;
&lt;br /&gt;
https://geekytheory.com/prototipado-y-herencia-en-javascript&lt;br /&gt;
&lt;br /&gt;
https://geekytheory.com/contextos-y-encapsulamiento-en-javascript/&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_Estructures_definides_pel_Programador_-_Objectes&amp;diff=19107</id>
		<title>NF1 - Estructures definides pel Programador - Objectes</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_Estructures_definides_pel_Programador_-_Objectes&amp;diff=19107"/>
				<updated>2025-11-11T14:31:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici PROFESSORS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectes =&lt;br /&gt;
== Instanciació d'objectes==&lt;br /&gt;
&lt;br /&gt;
La forma més sencilla de crear un nou objecte és amb una intrucció com aquesta :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
var obj2 = {};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això crea un objecte nou, buit i que més tard podem ampliar amb propietats:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var o = {};&lt;br /&gt;
o.name = &amp;quot;Marta&amp;quot;;&lt;br /&gt;
o.feina = &amp;quot;contable&amp;quot;;&lt;br /&gt;
o.antiguitat = 11;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per eliminar una propietat podem utilitzar l'operador ''delete'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object()&lt;br /&gt;
alert(obj1.nombre)   // undefined&lt;br /&gt;
&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;&lt;br /&gt;
alert(obj1.nombre)   // &amp;quot;mundo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
delete obj1.nombre&lt;br /&gt;
&lt;br /&gt;
alert(obj1.nombre)   // undefined otra vez&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per afegir un mètode podem fer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;;&lt;br /&gt;
obj1.saluda = function() { alert(&amp;quot;hola &amp;quot;+this.nombre) };&lt;br /&gt;
obj1.saluda();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
També podem construir objectes de manera literal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = {nombre:&amp;quot;mundo&amp;quot;,&lt;br /&gt;
            saluda: function() { alert(&amp;quot;hola &amp;quot;+this.nombre) }&lt;br /&gt;
};&lt;br /&gt;
obj1.saluda();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I podem accedir als mètodes i a les propietats de diferents maneres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj1 = new Object();&lt;br /&gt;
obj1.nombre = &amp;quot;mundo&amp;quot;;&lt;br /&gt;
obj1.saluda = function() { alert(&amp;quot;hola &amp;quot;+this.nombre) };&lt;br /&gt;
&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1.nombre);       // Acceso normal&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1[ &amp;quot;nombre&amp;quot; ]);  // Acceso indexado con un literal&lt;br /&gt;
var prop = &amp;quot;nombre&amp;quot;;&lt;br /&gt;
alert(&amp;quot;hola &amp;quot; + obj1[ prop ]);      // Acceso indexado con una variable&lt;br /&gt;
&lt;br /&gt;
obj1.saluda();         // Invocación normal&lt;br /&gt;
obj1[ &amp;quot;saluda&amp;quot; ]();    // Acceso indexado con un literal&lt;br /&gt;
var func = &amp;quot;saluda&amp;quot;;&lt;br /&gt;
obj1[ func ]();        // Acceso indexado con una variable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mètodes privats'''&lt;br /&gt;
Aquesta part ja s'ha vist en el capitol de les funcions, però no està de més tornar a fer una ullada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*CREACIÓ CLASSES ECMASCRIP 5*/&lt;br /&gt;
&lt;br /&gt;
/*Ejemplo 1*/&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
	this.saluda = function() {&lt;br /&gt;
		alert(&amp;quot;hola &amp;quot;+plural(this.nombre))&lt;br /&gt;
	}&lt;br /&gt;
	function plural(n) {&lt;br /&gt;
		return n + &amp;quot;s&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.saluda()&lt;br /&gt;
// obj1.plural()  // fallaría porque plural() es privado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*Ejemplo 2*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Animal(nombre, especie, numerodepatas, tienecola) { &lt;br /&gt;
    //Variables privadas el guión &amp;quot;_&amp;quot; no significa que haga las variables privadas sino que por convenio se especifica&lt;br /&gt;
    var _nombreCompleto; &lt;br /&gt;
    var _color; &lt;br /&gt;
    // Propiedades &lt;br /&gt;
    this.Nombre = nombre; &lt;br /&gt;
    this.Especie = especie; &lt;br /&gt;
    this.NumeroDePatas = numerodepatas; &lt;br /&gt;
    this.TieneCola = tienecola; &lt;br /&gt;
    // Metodos &lt;br /&gt;
    this.setColor = function (color) { &lt;br /&gt;
        _color = color; &lt;br /&gt;
    } &lt;br /&gt;
    this.getColor = function () { &lt;br /&gt;
        return _color; &lt;br /&gt;
    } &lt;br /&gt;
    this.setNombreCompleto = function() { &lt;br /&gt;
        _nombreCompleto = &amp;quot;Este Animal es un &amp;quot; + this.Nombre + &amp;quot; de la especie de los &amp;quot; + this.Especie; &lt;br /&gt;
    } &lt;br /&gt;
    this.getNombreCompleto = function() { &lt;br /&gt;
        this.setNombreCompleto(); &lt;br /&gt;
        return _nombreCompleto; &lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Els que venim d'un entorn orientat a objectes clàssic trobaran a faltar la encapsulació i la estructuració que implica el concepte de constructor de classe.&lt;br /&gt;
Javascript proporciona aquest mecanisme però d'una manera molt diferent. En Javascript totes les funcions i els objectes tenen una propietat anomenada ''prototype'' que fa referència a un objecte buit de forma inicial. Aquest objecte buit es crea utilitzant la paraula ''new''.&lt;br /&gt;
&lt;br /&gt;
==CREACIÓ CLASSES ECMASCRIPT 6==&lt;br /&gt;
&lt;br /&gt;
'''MÉTODOS ESTÁTICOS'''&lt;br /&gt;
&lt;br /&gt;
En algunos casos, nos puede interesar crear métodos estáticos en una clase porque para utilizarlos no hace falta crear ese objeto, sino que se pueden ejecutar directamente sobre la clase directamente.&lt;br /&gt;
&lt;br /&gt;
Una de las limitaciones de los métodos estáticos es que en su interior sólo podremos hacer referencia a elementos que también sean estáticos.&lt;br /&gt;
&lt;br /&gt;
No podremos acceder a propiedades o métodos no estáticos, ya que necesitaríamos instanciar un objeto para hacerlo.&lt;br /&gt;
&lt;br /&gt;
Los métodos estáticos se suelen utilizar para crear funciones de apoyo que realicen tareas concretas o genéricas, porque están relacionadas &lt;br /&gt;
con la clase en general.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Animal {&lt;br /&gt;
  static despedirse() {&lt;br /&gt;
    return &amp;quot;Adiós&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Animal.despedirse(); // 'Adiós'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las clases, siendo estructuras para guardar información, pueden guardar variables con su correspondiente información. &lt;br /&gt;
Dicho concepto se denomina propiedades y en Javascript se realiza en el interior del constructor, precedido de la palabra clave this (que hace referencia a «este» elemento, es decir, la clase).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Animal {&lt;br /&gt;
  constructor(n = &amp;quot;pato&amp;quot;) {&lt;br /&gt;
    this.nombre = n;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  quienSoy() {&lt;br /&gt;
    return &amp;quot;Hola, soy &amp;quot; + this.nombre;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Creación de objetos&lt;br /&gt;
const pato = new Animal();&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy pato'&lt;br /&gt;
&lt;br /&gt;
const donald = new Animal(&amp;quot;Donald&amp;quot;);&lt;br /&gt;
donald.quienSoy(); // 'Hola, soy Donald'&lt;br /&gt;
&lt;br /&gt;
/*las propiedades de la clase podrán ser modificadas externamente, ya que por defecto son propiedades públicas*/&lt;br /&gt;
pato.nombre = &amp;quot;Paco&amp;quot;;&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy Paco'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Propiedades y métodos privados'''&lt;br /&gt;
&lt;br /&gt;
A partir de la versión ECMAScript 2020, se introduce la posibilidad de crear campos de clase privados (los cuales aún cuentan con poco soporte).&lt;br /&gt;
&lt;br /&gt;
Antiguamente todas las propiedades y métodos eran públicos por defecto, pero ahora también pueden ser privados. &lt;br /&gt;
Para ello, solo hay que añadir el carácter # justo antes del nombre de la propiedad o método.&lt;br /&gt;
&lt;br /&gt;
Estas propiedades o métodos precedidos de # son privados y sólo podrán ser llamados desde un método de clase, &lt;br /&gt;
ya que si se hace desde fuera obtendremos un error.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, si se llama a un método público como decirSacrilegio(), que a su vez llama a un método privado &lt;br /&gt;
(pero desde dentro de la clase), todo funcionará correctamente sin error, ya que el método #decirSecreto() &lt;br /&gt;
se está llamando desde dentro de la clase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Animal {&lt;br /&gt;
  #miSecreto = &amp;quot;Me gusta Internet Explorer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  #decirSecreto() {&lt;br /&gt;
    return this.#miSecreto;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  decirSacrilegio() {&lt;br /&gt;
    return this.#decirSecreto();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const patitoFeo = new Animal();&lt;br /&gt;
patitoFeo.#decirSecreto();     // Error&lt;br /&gt;
patitoFeo.decirSacrilegio();   // OK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consulta la compatibilitat de mètodes privats a: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields&lt;br /&gt;
&lt;br /&gt;
'''Ámbitos de en una clase'''&lt;br /&gt;
&lt;br /&gt;
Dentro de una clase tenemos dos tipos de ámbitos: '''ámbito de método y ámbito de clase''':&lt;br /&gt;
&lt;br /&gt;
1)En primer lugar, veamos el '''ámbito dentro de un método'''. Si declaramos variables o funciones dentro de un método con ''var, let o const'', &lt;br /&gt;
''estos elementos existirán sólo en el método en cuestión.'' Además, no serán accesibles desde fuera del método.&lt;br /&gt;
&lt;br /&gt;
Observa que la variable name solo se muestra cuando se hace referencia a ella dentro del constructor() que es donde se creó y donde existe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Clase {&lt;br /&gt;
  constructor() {&lt;br /&gt;
    const name = &amp;quot;Manz&amp;quot;;&lt;br /&gt;
    console.log(&amp;quot;Constructor: &amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  metodo() {&lt;br /&gt;
    console.log(&amp;quot;Método: &amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const c = new Clase(); // 'Constructor: Manz'&lt;br /&gt;
&lt;br /&gt;
c.name; // undefined&lt;br /&gt;
c.metodo(); // 'Método: '&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) En segundo lugar, tenemos '''el ámbito de clase'''. Podemos crear propiedades precedidas por this. (desde dentro del constructor) y &lt;br /&gt;
desde ES2020 desde la parte superior de la clase, ''lo que significa que estas propiedades tendrán alcance en toda la clase, &lt;br /&gt;
tanto desde el constructor, como desde otros métodos del mismo.&lt;br /&gt;
&lt;br /&gt;
Ojo, estas propiedades también pueden ser modificadas desde fuera de la clase, simplemente asignándole otro valor.''&lt;br /&gt;
Si quieres evitarlo, añade el # antes del nombre de la propiedad al declararla (ejemplo #role).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Clase {&lt;br /&gt;
  role = &amp;quot;Teacher&amp;quot;;   // ES2020+&lt;br /&gt;
&lt;br /&gt;
  constructor() {&lt;br /&gt;
    this.name = &amp;quot;Manz&amp;quot;;&lt;br /&gt;
    console.log(&amp;quot;Constructor: &amp;quot; + this.name);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  metodo() {&lt;br /&gt;
    console.log(&amp;quot;Método: &amp;quot; + this.name + this.role);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const c = new Clase(); // 'Constructor: Manz'&lt;br /&gt;
&lt;br /&gt;
c.name;     // 'Manz'&lt;br /&gt;
c.metodo(); // 'Método: Manz'&lt;br /&gt;
c.role;     // 'Teacher'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''La palabra clave this'''&lt;br /&gt;
&lt;br /&gt;
Como te habrás fijado en ejemplos anteriores, hemos introducido la palabra clave this, que hace referencia al elemento padre que la contiene.&lt;br /&gt;
&lt;br /&gt;
Así pues, si escribimos this.nombre dentro de un método, estaremos haciendo referencia a la propiedad nombre que existe dentro de ese objeto.&lt;br /&gt;
&lt;br /&gt;
De la misma forma, si escribimos this.hablar() estaremos ejecutando el método hablar() de ese objeto.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que si usas this en contextos concretos, como por ejemplo fuera de una clase te devolverá el objeto Window, &lt;br /&gt;
que no es más que una referencia al objeto global de la pestaña actual donde nos encontramos y tenemos cargada la página web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
class Animal {&lt;br /&gt;
  constructor(n = &amp;quot;pato&amp;quot;) {&lt;br /&gt;
    this.nombre = n;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  hablar() {&lt;br /&gt;
    return &amp;quot;Cuak&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  quienSoy() {&lt;br /&gt;
    return &amp;quot;Hola, soy &amp;quot; + this.nombre + &amp;quot;. ~&amp;quot; + this.hablar();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const pato = new Animal(&amp;quot;Donald&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
pato.quienSoy(); // 'Hola, soy Donald. ~Cuak'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EJEMPLO CLASE CON GETTERS y SETTERS'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Para crear una clase se usa la palabra reservada 'class'&lt;br /&gt;
                 class Persona {&lt;br /&gt;
			/* El método 'constructor' se utiliza para inicializar los atributos&lt;br /&gt;
			 * de la clase.&lt;br /&gt;
			 *&lt;br /&gt;
			 * Observar que se pueden especificar valores por defecto a los perámetros.&lt;br /&gt;
			 *  - Se pasa el valor por defecto 'conocido' a 'tipoSaludo'.&lt;br /&gt;
			 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			constructor(nombre, edad, email, tipoSaludo = 'conocido') {&lt;br /&gt;
				// Para hacer referencia a las propiedades del objeto se utiliza la&lt;br /&gt;
				// palabra reservada 'this'.&lt;br /&gt;
				this._nombre = nombre;&lt;br /&gt;
				this._edad = edad;&lt;br /&gt;
				this._email = email;&lt;br /&gt;
				this._tipoSaludo = tipoSaludo;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Se pueden crear los getter con la palabra reservada 'get'.&lt;br /&gt;
			// Los getter sirven para obtener los valores de las propiedades&lt;br /&gt;
			// del objeto.&lt;br /&gt;
			get nombre() {&lt;br /&gt;
				return this._nombre;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Se pueden crear los setter con la palabra reservada 'set'.&lt;br /&gt;
			// Los setter sirven para asignar nuevos valores a las propiedades&lt;br /&gt;
			// del objeto.&lt;br /&gt;
			set tipoSaludo(tipoSaludo) {&lt;br /&gt;
				this._tipoSaludo = tipoSaludo;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			// Para crear un método simplemente se define su nombre&lt;br /&gt;
			saludar(nombre) {&lt;br /&gt;
&lt;br /&gt;
				if (this._tipoSaludo === 'conocido')&lt;br /&gt;
					console.log(`Hola ${nombre}, ¿Cómo estas?`);&lt;br /&gt;
				else&lt;br /&gt;
					console.log(`Hola, mi nombre es ${this._nombre}`);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			/* En algunas ocaciones se puede dar el caso de que no podemos tener&lt;br /&gt;
			 * acceso a nuestro objeto, la solución a este inconveniente se muestra&lt;br /&gt;
			 * y explica en este método.&lt;br /&gt;
			 */&lt;br /&gt;
			mostrarme() {&lt;br /&gt;
				// Declarando una variable local y asignándole una referencia al propio&lt;br /&gt;
				// objeto.&lt;br /&gt;
				let _this = this;&lt;br /&gt;
				// En una función anónima no se puede acceder al propio objeto usando&lt;br /&gt;
				// la palabra reservada 'this' (obtenemos como salida 'undefined').&lt;br /&gt;
				(function () {&lt;br /&gt;
					console.log(this);&lt;br /&gt;
				})();&lt;br /&gt;
				// Una solución es declarar una variable y asignarle una referencia&lt;br /&gt;
				// al objeto como se hace al inicio del método.&lt;br /&gt;
				(function () {&lt;br /&gt;
					console.log(_this);&lt;br /&gt;
				})();&lt;br /&gt;
				// Esta es la manera correcta y elegante de acceder a nuestro objeto.&lt;br /&gt;
				((e) =&amp;gt; {&lt;br /&gt;
					console.log(this);&lt;br /&gt;
				})();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Los métodos estáticos se declaran usando la palabra reservada 'static'.&lt;br /&gt;
			static girar() {&lt;br /&gt;
				console.log('Girando!');&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
            // Para crear una instancia de la clase 'Persona' se usa la &lt;br /&gt;
            // palabra reservada 'new'. Recordar que el cuarto parámetro &lt;br /&gt;
            //es opcional, por lo que al no pasarle valor tomara por &lt;br /&gt;
            //defecto el especificado en el método 'constructor' de la clase.&lt;br /&gt;
            var p = new Persona('Julio', 30, 'juliolamerce@gmail.com');&lt;br /&gt;
            // Llamando a uno de sus métodos.&lt;br /&gt;
            p.saludar('Ana');&lt;br /&gt;
            // Cambiando el valor del atributo 'tipoSaludo' usando el setter tipoSaludo&lt;br /&gt;
            p.tipoSaludo = 'otro';&lt;br /&gt;
            p.saludar();&lt;br /&gt;
            // Obtenieno el valor del atributo 'nombre' usando el getter nombre&lt;br /&gt;
            console.log(p.nombre);&lt;br /&gt;
            // Ejemplo del acceso al propio objeto y la mejor forma de hacerlo, en&lt;br /&gt;
            // circunstancias como: los eventos, funciones anónimas, uso de JQuery dentro&lt;br /&gt;
            // del método, etc.&lt;br /&gt;
            p.mostrarme();&lt;br /&gt;
            &lt;br /&gt;
            // Un método estático no necesita de una instacia de clase para ser invocado.&lt;br /&gt;
            Persona.girar();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://lenguajejs.com/javascript/caracteristicas/clases-es6/&lt;br /&gt;
&lt;br /&gt;
== Herència  ==&lt;br /&gt;
&lt;br /&gt;
'''ECMAScript 6'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Persona {  &lt;br /&gt;
  // constructor donde definir las variables que se reciben y guardarlas en el objeto usando this&lt;br /&gt;
  constructor(nombre, edad) {&lt;br /&gt;
    this.nombre = nombre;&lt;br /&gt;
    this.edad   = edad;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // método para presentarse&lt;br /&gt;
  presentarse() {&lt;br /&gt;
    return 'Hola me llamo ' + this.nombre + ' y tengo ' + this.edad + ' años';&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
   get verNombre() {&lt;br /&gt;
    return this.nombre;&lt;br /&gt;
  }&lt;br /&gt;
  set nuevoNombre(nuevo) {&lt;br /&gt;
    this.nombre = nuevo;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//var persona = new Persona('Julio', 22);  &lt;br /&gt;
//persona.presentarse();  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Desarrollador extends Persona {  &lt;br /&gt;
  constructor(nombre, edad, cargo) {&lt;br /&gt;
    super(nombre, edad);&lt;br /&gt;
    this.cargo = cargo;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  presentarse() {&lt;br /&gt;
    return super.presentarse() + ' y soy desarrollador ' + this.cargo;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var persona = new Desarrollador('Julio', 22, 'Frontend');  &lt;br /&gt;
persona.presentarse(); // 'Hola me llamo Julio y tengo 22 años y soy desarrollador Frontend'  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://lenguajejs.com/javascript/caracteristicas/herencia-de-clases/&lt;br /&gt;
&lt;br /&gt;
https://platzi.com/blog/ecmascript-nueva-sintaxis/&lt;br /&gt;
&lt;br /&gt;
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ECMAScript 5 Herència amb prototips'''&lt;br /&gt;
&lt;br /&gt;
Analitzarem l'us de la paraula ''new'' a una funció i veurem com la propietat ''prototype'' proporciona propietats per a la nova instància.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
&lt;br /&gt;
Persona.prototype.caminar = function(){return true;};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var pere = Persona();&lt;br /&gt;
assert(pere === undefined, &amp;quot;No s'ha creat cap instancia de Persona&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
var jaume = new Persona();&lt;br /&gt;
&lt;br /&gt;
assert(jaume &amp;amp;&amp;amp; jaume.caminar &amp;amp;&amp;amp; jaume.caminar(), &amp;quot;La instancia existeix i el mètode es pot cridar&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem veure en l'exemple anterior que pere te el valor ''undefined''. Aixó és així per que la funció Persona, si no es crida amb el constructor ''new'' no retorna cap valor.&lt;br /&gt;
Veiem que és veritat, ja que quan el cridem amb el constructor ''new'' Jaume existeix i a més a més té un mètode anomenat ''caminar''.&lt;br /&gt;
&lt;br /&gt;
=== Llavors, què és un prototip?? ===&lt;br /&gt;
&lt;br /&gt;
Un prototype és un objecte del que altres objectes hereten propietats.Aquest objecte pot ser qualsevol objecte.&lt;br /&gt;
L'herència basada en classes no existeix en Javascript, sinó que és herència basada en prototips. Això significa que no hi ha una jerarquia de classes real (amb la seva extends, accés super, etc.), sinó que cada ''classe'' té un objecte de referència (com si fos la seva classe pare) on consultar atributs i mètodes en cas que la nostra classe no els trobi. Podem intentar simular una jerarquia (ull, simular) usant aquests objectes de referència, anomenats prototips, amb una propietat especial que tenen totes les “classes” anomenada prototype. Aquesta propietat és asignable i la seva labor consisteix a guardar un objecte. Vegem-ho amb un exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
	this.saluda = function() {&lt;br /&gt;
		alert(&amp;quot;hola &amp;quot;+this.nombre)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
// Añade un objeto al prototipo&lt;br /&gt;
Saludator.prototype = {&lt;br /&gt;
	apellido: &amp;quot;cruel&amp;quot;,&lt;br /&gt;
	despide: function() {&lt;br /&gt;
		alert(&amp;quot;adios &amp;quot;+this.nombre+&amp;quot; &amp;quot;+this.apellido)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.despide() // &amp;quot;adios mundo cruel&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Quins objectes tenen prototip? ====&lt;br /&gt;
&lt;br /&gt;
Tot objecte té un prototip per defecte. Com els prototips són objectes, tots ells tenen un prototip també. Solament hi ha una excepció: el prototip de l'objecte per defecte, al final de la cadena de prototips (Object).&lt;br /&gt;
&lt;br /&gt;
Totes les classes tenen per defecte un objecte prototype buit, com si en crear-les es fes prototype = {}. Per aquesta raó, podem accedir a aquesta variable i assignar-li els atributs d'un en un. El següent exemple és completament equivalent a l'anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var Saludator = function(nom) {&lt;br /&gt;
	this.nombre = nom&lt;br /&gt;
}&lt;br /&gt;
// Añade nuevas propiedades al prototipo&lt;br /&gt;
Saludator.prototype.apellido = &amp;quot;cruel&amp;quot;&lt;br /&gt;
Saludator.prototype.despide = function() {&lt;br /&gt;
	alert(&amp;quot;adios &amp;quot;+this.nombre+&amp;quot; &amp;quot;+this.apellido)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var obj1 = new Saludator(&amp;quot;mundo&amp;quot;)&lt;br /&gt;
obj1.despide() // &amp;quot;adios mundo cruel&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ok, recapitulem… què deies que era un objecte?&lt;br /&gt;
&lt;br /&gt;
Un objecte en Javascript és una col·lecció qualsevol de parells clau-valor. Si no és un valor primitiu (undefined, null, boolean, number o string) és un objecte.&lt;br /&gt;
&lt;br /&gt;
=== Utilitzant Prototips ===&lt;br /&gt;
&lt;br /&gt;
Estudia aquest codi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = false;&lt;br /&gt;
	this.caminar = function(){return !this.parat;};&lt;br /&gt;
}&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
&lt;br /&gt;
console.log(joan.caminar()); //La crida a caminar és la crida definida dintre de Persona i no al mètode del prototip&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això demostra que el membres de la instància creats dintre del constructor bloquejaran les propietats i els mètodes definits amb el mateix nom en el prototip.&lt;br /&gt;
&lt;br /&gt;
=== Com abordar les referències als mètodes i propietats dels prototips ===&lt;br /&gt;
&lt;br /&gt;
Amb els exemples vistos anteriorment, pots arribar a pensar que quan es crea un nou objecte es copien els valors i els mètodes del seu prototip, i si hi ha algún mètode o propietat que s'anomena igual, es sobreescriu el seu valor amb el valor que hi ha en el constructor de l'objecte.&lt;br /&gt;
Si fos així, en el següent codi, el mètode caminar no es podria utilitzar :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = true;&lt;br /&gt;
}&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&lt;br /&gt;
assert(joan.caminar(), &amp;quot;El mètode existeix, fins i tot quan la persona s'ha creat abans.&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Llavors, aixó demostra que no hi ha una copia de propietats si no molt més.&lt;br /&gt;
El que succeeix es que les funcions i mètodes del prototip  s'adjunten a l'objecte construït i es consulta durant la conciliació de les referències de la propietat que es duen a terme en l'objecte. És a dir:&lt;br /&gt;
&lt;br /&gt;
* 1. Quan es fa una referència de propietat a un objecte, es comprova a veure si existeix en el propi objecte, si existeix s'agafa el valor, si no...&lt;br /&gt;
* 2. Es localitza el prototip associat al objecte i es comprova si existeix la propietat, Si existeix es retorna el valor, si no...&lt;br /&gt;
* 3. El valor es ''undefined''&lt;br /&gt;
&lt;br /&gt;
Llavors podem dir que els mètodes i les propietats NO ES COPIEN,  S'ADJUNTEN de forma activa al objecte.&lt;br /&gt;
&lt;br /&gt;
=== Funció constructor d'un objecte ===&lt;br /&gt;
Tots els objectes tenen una referència a la funció que s'ha utilitzat per construir l'objecte. Aquesta propietat s'anomena ''constructor''. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){&lt;br /&gt;
	this.parat = true;&lt;br /&gt;
}&lt;br /&gt;
var joan = new Persona();&lt;br /&gt;
Persona.prototype.caminar = function(){return this.parat;};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En aquest cas ''joan.constructor'' fa referència a la funció ''Persona()''. Sabem que les funcion son objectes, per tant, aquesta funció té propietats. Una de elles és la propietat ''prototype''.&lt;br /&gt;
Per tant, podem accedir a les propietats i mètodes del prototype des del mateix objecte: ''joan.constructor.prototype.caminar''.&lt;br /&gt;
&lt;br /&gt;
=== Herència amb Prototips ===&lt;br /&gt;
&lt;br /&gt;
Volem crear hereència entre diferents objectes. Analitza el següent codi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = { ballar : Persona.prototype.ballar};    //fa refència a ballar del mètode de Persona&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();&lt;br /&gt;
console.log(joan instanceof Alumne);     //true&lt;br /&gt;
console.log(joan instanceof Persona);    //false&lt;br /&gt;
console.log(joan instanceof Object);     //true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creus que està ben aconseguida la herència? Prova-ho.&lt;br /&gt;
D'aquesta manera estem copiant la funció ''ballar'' definida en Persona en Alumne. ''Però no estem creant herència, estem copiant funcions.''&lt;br /&gt;
Llavors quina tècnica s'utilitza??&lt;br /&gt;
&lt;br /&gt;
El que volem crear és una cadena de prototips per tal que ''Alumne'' pugui ser una ''Persona'' i aquesta a la seva vegada un ''Mamífer'' i aquesta una ''Animal'' i així fins arribar a ''Object''.&lt;br /&gt;
La millor manera de fer-ho és '''utilitzant una instància d'objecte com a prototip'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Subclass.prototype = new SuperClass();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'exemple anterior quedaria de la següent manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();          //joan apuntaria a Persona i executaria el mètode de ballar de Persona&lt;br /&gt;
&lt;br /&gt;
console.log(joan instanceof Alumne);      //true    &amp;quot;joan és un alumne&amp;quot;&lt;br /&gt;
console.log(joan instanceof Persona);     //true    &amp;quot;joan és una Persona&amp;quot; &lt;br /&gt;
console.log(joan instanceof Object);      //true    &amp;quot;joan és una Objecte&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Casi casi ho hem aconseguit. L'unic problema es que hem perdut la referència al nostre propi constructor. ''joan.constructor'' apunta a ''Persona'' en compte d'apuntar a ''Alumne''. Com ho solucionem?? fàcil:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function Persona(){}&lt;br /&gt;
Persona.prototype.ballar = function(){alert(&amp;quot;eeeeo&amp;quot;);};&lt;br /&gt;
&lt;br /&gt;
function Alumne(){}&lt;br /&gt;
Alumne.prototype = new Persona();&lt;br /&gt;
Alumne.prototype.constructor = Alumne;&lt;br /&gt;
&lt;br /&gt;
var joan = new Alumne();&lt;br /&gt;
joan.ballar();&lt;br /&gt;
&lt;br /&gt;
console.log(joan instanceof Alumne);      //true&lt;br /&gt;
console.log(joan instanceof Persona);     //true&lt;br /&gt;
console.log(joan instanceof Object);      //true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dibuix amb la cadena de prototips:&lt;br /&gt;
[[Fitxer:cadena_de_prototips.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
=== Exemple d'herència amb prototips ===&lt;br /&gt;
&lt;br /&gt;
Exemple de herència :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// define la clase Person&lt;br /&gt;
function Person() {}&lt;br /&gt;
&lt;br /&gt;
Person.prototype.walk = function(){};&lt;br /&gt;
Person.prototype.sayHello = function(){  alert ('hola');};&lt;br /&gt;
&lt;br /&gt;
// define la clase Student&lt;br /&gt;
function Student() {&lt;br /&gt;
  // Llama al constructor primario&lt;br /&gt;
  Person.call(this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// hereda Person&lt;br /&gt;
Student.prototype = new Person();&lt;br /&gt;
&lt;br /&gt;
// corrige el puntero del constructor porque apunta a Person&lt;br /&gt;
Student.prototype.constructor = Student;&lt;br /&gt;
 &lt;br /&gt;
// reemplaza el método sayHello&lt;br /&gt;
Student.prototype.sayHello = function(){&lt;br /&gt;
  alert ('hola, soy estudiante');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// agrega el método sayGoodBye&lt;br /&gt;
Student.prototype.sayGoodBye = function(){&lt;br /&gt;
  alert ('adiós');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var student1 = new Student();&lt;br /&gt;
student1.sayHello();&lt;br /&gt;
student1.sayGoodBye();&lt;br /&gt;
&lt;br /&gt;
// comprueba la herencia&lt;br /&gt;
alert(student1 instanceof Person); // true  &lt;br /&gt;
alert(student1 instanceof Student); // true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Altre Exemple:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Padre(attPadre) {&lt;br /&gt;
   this.atributoPadre=attPadre;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function Hijo(attHijo, attPadre) {&lt;br /&gt;
   Padre.call(this,attPadre);&lt;br /&gt;
   this.atributoHijo=attHijo;&lt;br /&gt;
}&lt;br /&gt;
Hijo.prototype = new Padre();&lt;br /&gt;
 &lt;br /&gt;
a = new Hijo(2,3);&lt;br /&gt;
alert (a.atributoPadre);&lt;br /&gt;
alert (a.atributoHijo);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exercici clase TEXT ==&lt;br /&gt;
&lt;br /&gt;
Crea una classe TEXT que permeti :&lt;br /&gt;
* Definir una cadena de caràcters inicialitzada pel constructor&lt;br /&gt;
* Afegir caràcters&lt;br /&gt;
* Saber quantes vocals hi ha en el text&lt;br /&gt;
* Mostrar el text&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio classe text]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercici Figures ==&lt;br /&gt;
&lt;br /&gt;
*Tenemos una clase padre Figura que recibe como parámetro un color, y tienen sus get y set y un método que muestra la info(color).&lt;br /&gt;
&lt;br /&gt;
*La clase Cuadrado Hereda de Figura, recibe color y lado, tiene sus get y set, dos métodos calculaArea y muestra info(color,lado y área).&lt;br /&gt;
&lt;br /&gt;
*La clase Rectángulo hereda de Figura, recibe color, base, altura, tiene sus get y set, dos métodos calcularArea y muestra info(color, base, altura y área).&lt;br /&gt;
&lt;br /&gt;
*La clase Triangulo herede de Rectángulo, recibe color, base, altura, tiene sus get y set, un método que muestra toda la info (color,base, altura y área) &lt;br /&gt;
&amp;lt;!-- Comentat Monica&lt;br /&gt;
:[[sol_figuras_herencia]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Joc de Rol ==&lt;br /&gt;
&lt;br /&gt;
Es vol programar un joc de rol, del que ens han encarregat programar en JavaScript l'esquema dels personatges. Així que ens han donat les següents directrius:&lt;br /&gt;
* S'ha de programar 2 tipus de personatges: Els mags i els monjos.&lt;br /&gt;
* Tots els personatges tenen les següents dades:&lt;br /&gt;
** Nom : una cadena&lt;br /&gt;
** Raça : Pot pendre els següents valors: Humà, Elf, Nan, Orco&lt;br /&gt;
** Força : entre 0 i 20&lt;br /&gt;
** Inteligència : entre 0 i 20&lt;br /&gt;
** Punts de vida màxims : entre 0 i 100&lt;br /&gt;
** Punts de vida actuals : entre 0 i punts de vida màxims&lt;br /&gt;
* Cada personatge té atributs i restriccions específics que es detallen en els següents apartats:&lt;br /&gt;
&lt;br /&gt;
'''Apartat a : Personatge''' &lt;br /&gt;
Escriu la classe Personatge que reuneixi tots els atributs mencionats a l'enunciat. Pe fer-ho implementa:&lt;br /&gt;
* Un constructor que inicialitzi els atributs.&lt;br /&gt;
* Mètodes afegir i aconseguir per a tots els atributs de la classe&lt;br /&gt;
* Mètode imprimeix que mostri per pantalla les dades del personatge.&lt;br /&gt;
&lt;br /&gt;
'''Apartat b : Mag'''&lt;br /&gt;
Escriu la classe mag tenint en compte :&lt;br /&gt;
* Quan es crei un mag no pot tenir una inteligència menor que 17 ni una força mayor que 15.&lt;br /&gt;
* Un mag emmagatzema els noms del encanteris que ha memoritzat. Un mag normal només pot memoritzar 4 encanteris.&lt;br /&gt;
* Crea un mètode anomenat aprenEncanteri que reb un String i memoritza l'encanteri&lt;br /&gt;
* Crea un mètode anomenat llençaEncanteri que reb un parametre que serà un Objecte Personatge que és a qui recau l'encanteri. S'ha de restar 10 punts de vida d'aquest personatge i després s'ha d'esborrar l'encanteri.&lt;br /&gt;
* Escriu el constructor de la classe &lt;br /&gt;
* Escriu el mètode imprimeix per tal que es mostrin les noves dades del personatge&lt;br /&gt;
&lt;br /&gt;
'''Apartat c : Monjo'''&lt;br /&gt;
Escriu la classe Monjo tenint en compte :&lt;br /&gt;
* Quan es crei un monjo no pot tenir una inteligència menor que 12 ni mayor que 16 ni una força menor que 18.&lt;br /&gt;
* Un monjo reça a un Déu. Per tant, s'ha de modificar el constructor per tal que accepti el nom del Déu del que és devot.&lt;br /&gt;
* Un monjo pot curar, per tant, crea un mètode anomentat sanar que reb un personatge i aquest personatge reb 10 punts de vida.&lt;br /&gt;
* Escriu el mètode imprimeix per tal que es mostrin les noves dades del personatge&lt;br /&gt;
&lt;br /&gt;
'''Apartat d : Programa Principal''' &lt;br /&gt;
Crea el programa principal on es crein 2 mags (A,B) i un monjo (C) i realitza les següents accions:&lt;br /&gt;
* Imprimeix les dades dels tres personatges.&lt;br /&gt;
* El mag A aprén 2 encanteris.&lt;br /&gt;
* El mag B aprén 1 encanteri.&lt;br /&gt;
* Imprimeix les dades dels mags.&lt;br /&gt;
* El mag A llença un encanteri sobre el mag B&lt;br /&gt;
* El mag B llença un encanteri sobre el mag A&lt;br /&gt;
* El monjo cura al mag B.&lt;br /&gt;
* El mag A llença un encanteri sobre el mag B.&lt;br /&gt;
* Imprimeix les dades dels tres personatges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[Solucio joc Rol]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercici PROFESSORS==&lt;br /&gt;
Crea una classe Persona, que contingui les dades nom, cognoms i edat, es podrà obtenir i modificicar els valors.&lt;br /&gt;
Es haurà de crear una altra classe Professor que baixarà de la classe Persona.&lt;br /&gt;
&lt;br /&gt;
També hi ha una classe ProfessorFixe que heretarà les dades de Professor, a més rebrà com a paràmetre un identificador.&lt;br /&gt;
&lt;br /&gt;
També hi ha una classe ProfessorInteri que heretarà les dades de Professor, a més rebrà com a paràmetre la data que demana l'interinatge.&lt;br /&gt;
&lt;br /&gt;
S'haurà de crear un mètode que mostre les dades de tots els objectes creats. (Nom, cognoms, id, data ...)&lt;br /&gt;
&lt;br /&gt;
S'haurà de crear una classe ListaProfe que contindrà un array on s'aniran emmagatzemant els objectes de ProfeFixe, ProfeInteri i Profes per això hi ha d'haver un mètode insertarProfe i un altre obtenerProfe i per últim mostrarProfes&lt;br /&gt;
&lt;br /&gt;
Insertar 3 profesInteri, 3 profesFixe i 3 Professors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[Solucio Profes]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solució als Exercicis ==&lt;br /&gt;
&lt;br /&gt;
'''Exercici TEXT'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;&lt;br /&gt;
		Classe TEXT&lt;br /&gt;
	&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		class TEXT {&lt;br /&gt;
			#text;&lt;br /&gt;
			constructor(_text){&lt;br /&gt;
				this.#text=_text;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			afegir(_text) {&lt;br /&gt;
				this.#text+=_text;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			comptaVocals() {&lt;br /&gt;
&lt;br /&gt;
				var esVocal=function(c){&lt;br /&gt;
					return c==&amp;quot;a&amp;quot; || c==&amp;quot;e&amp;quot; || c==&amp;quot;i&amp;quot; || c==&amp;quot;o&amp;quot; || c==&amp;quot;u&amp;quot;;&lt;br /&gt;
				};&lt;br /&gt;
&lt;br /&gt;
				var array1=this.#text.split(&amp;quot;&amp;quot;);&lt;br /&gt;
				var array2=array1.filter(esVocal);&lt;br /&gt;
				return array2.length;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			get text(){&lt;br /&gt;
				return this.#text;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var text1=new TEXT(&amp;quot;Hola, que tal?&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;text:&amp;quot;+text1.text);&lt;br /&gt;
		text1.afegir(&amp;quot; bon dia&amp;quot;);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;text:&amp;quot;+text1.text);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;num vocals:&amp;quot;+text1.comptaVocals());&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici Figures'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1&amp;gt;&lt;br /&gt;
		Exercici Figures&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		class Figura {&lt;br /&gt;
			#color;&lt;br /&gt;
			constructor(_color){&lt;br /&gt;
				this.#color=_color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get color(){&lt;br /&gt;
				return this.#color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set color(_color){&lt;br /&gt;
				this.#color=_color;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			info(){&lt;br /&gt;
				return &amp;quot;color:&amp;quot;+this.#color;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		class Cuadrado extends Figura {&lt;br /&gt;
			#lado;&lt;br /&gt;
			constructor(_color,_lado) {&lt;br /&gt;
				super(_color);&lt;br /&gt;
				this.#lado=_lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get lado() {&lt;br /&gt;
				return this.#lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set lado(_lado) {&lt;br /&gt;
				this.#lado=_lado;&lt;br /&gt;
			}&lt;br /&gt;
			info(){&lt;br /&gt;
				return super.info()+&amp;quot;, lado:&amp;quot;+this.#lado+&amp;quot;, área:&amp;quot;+this.#lado*this.#lado;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		class Rectangulo extends Figura {&lt;br /&gt;
			#base;&lt;br /&gt;
			#altura;&lt;br /&gt;
			constructor(_color,_base,_altura) {&lt;br /&gt;
				super(_color);&lt;br /&gt;
				this.#base=_base;&lt;br /&gt;
				this.#altura=_altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get base() {&lt;br /&gt;
				return this.#base;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set base(_base) {&lt;br /&gt;
				this.#base=_base;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			get altura() {&lt;br /&gt;
				return this.#altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			set altura(_altura) {&lt;br /&gt;
				this.#altura=_altura;&lt;br /&gt;
			}&lt;br /&gt;
			info(){&lt;br /&gt;
				return super.info()+&amp;quot;, base:&amp;quot;+this.#base+&amp;quot;, altura:&amp;quot;+this.#altura+&amp;quot;, área:&amp;quot;+this.#base*this.#altura;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		class Triangulo extends Rectangulo {&lt;br /&gt;
			constructor(_color,_base,_altura) {&lt;br /&gt;
				super(_color,_base,_altura);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			info() {&lt;br /&gt;
				return &amp;quot;color: &amp;quot;+this.color+&amp;quot;, base: &amp;quot;+this.base+&amp;quot;, altura: &amp;quot;+this.altura+&amp;quot;, area: &amp;quot;+ this.base*this.altura/2;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var figura1=new Figura(&amp;quot;vermell&amp;quot;);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura1 info:&amp;quot;+figura1.info());&lt;br /&gt;
		&lt;br /&gt;
		figura2=new Cuadrado(&amp;quot;verd&amp;quot;,2);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura2 info:&amp;quot;+figura2.info());&lt;br /&gt;
		figura2.lado=6;&lt;br /&gt;
		figura2.color=&amp;quot;marró&amp;quot;;&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura2 info:&amp;quot;+figura2.info());&lt;br /&gt;
&lt;br /&gt;
		figura3= new Rectangulo(&amp;quot;blau&amp;quot;,3,4);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura3 info:&amp;quot;+figura3.info());&lt;br /&gt;
&lt;br /&gt;
		var figura4 = new Triangulo(&amp;quot;groc&amp;quot;,8,4);&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 info: &amp;quot;+figura4.info());&lt;br /&gt;
		figura4.base=10;&lt;br /&gt;
		figura4.altura=20;&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 info: &amp;quot;+figura4.info());&lt;br /&gt;
&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Triangulo:&amp;quot;+ (figura4 instanceof Triangulo));		&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Rectangulo:&amp;quot;+ (figura4 instanceof Rectangulo));		&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura4 es Figura:&amp;quot;+ (figura4 instanceof Figura));&lt;br /&gt;
		document.write(&amp;quot;&amp;lt;br&amp;gt;figura3 es Triangulo:&amp;quot;+ (figura3 instanceof Triangulo));&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&lt;br /&gt;
John Resig, Bear Bibeault, &amp;quot;Secrets of the Javascript Ninja&amp;quot;, Manning Publications, 2012. ISBN 193398869X&lt;br /&gt;
&lt;br /&gt;
[http://albertovilches.com/profundizando-en-javascript-parte-2-objetos-prototipos-herencia-y-namespaces  albertovilches]&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/es/docs/Web msdn-firefox]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=428uJQjcJmg&lt;br /&gt;
&lt;br /&gt;
https://geekytheory.com/prototipado-y-herencia-en-javascript&lt;br /&gt;
&lt;br /&gt;
https://geekytheory.com/contextos-y-encapsulamiento-en-javascript/&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=18018</id>
		<title>M6 - Desenvolupament web en entorn client</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=18018"/>
				<updated>2024-05-15T14:24:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* UF4. Comunicació asíncrona client-servidor. (40h) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== UF1 : Sintaxis del llenguatge. Objectes predefinits del llenguatge (33h) ==&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Arquitectures i tecnologies de la programació Web en entorn client]] ===&lt;br /&gt;
=== [[NF2 - Sintaxi Javascript]] ===&lt;br /&gt;
=== [[NF3 - Objectes predefinits del llenguatge Javascript]] ===&lt;br /&gt;
&lt;br /&gt;
== UF2 : Estructures definides pel programador. Objectes (30h) ==&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Funcions]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Objectes]] ===&lt;br /&gt;
&lt;br /&gt;
== UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h)  ==&lt;br /&gt;
=== [[NF1 - Esdeveniments i Validacio de formularis]] ===&lt;br /&gt;
=== [[NF2 - Model d'objectes del document]] ===&lt;br /&gt;
=== [[JQUERY]] ===&lt;br /&gt;
=== [[VUEJS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Això estava comentat&lt;br /&gt;
=== [[NF3 - JQUERY]] === &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UF4. Comunicació asíncrona client-servidor. (40h) ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''NF1'''&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== [[NF1 - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - WEBSOCKETS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''NF2'''&lt;br /&gt;
=== [[JQUERY - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
[https://jqueryui.com/ JQueryUI]&lt;br /&gt;
&lt;br /&gt;
'''NF3'''&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== [[NF3 - XML i JSON]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === [[NF2 - JQUERY-AJAX]]=== Això estava comentat--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[VUEJS - AJAX]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISCEL·LÀNIA ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://shopify.github.io/draggable/&lt;br /&gt;
https://haltu.github.io/muuri/&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17970</id>
		<title>NF3 - XML i JSON</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17970"/>
				<updated>2024-04-19T14:03:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* EXERCICIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON =&lt;br /&gt;
JSON (JavaScript Object Notation) és un format d'intercanvi de dades lleuger. És fàcil per als éssers humans a llegir i escriure. És fàcil per a les màquines per analitzar i generar. Es basa en un subconjunt del llenguatge de programació JavaScript, estàndard ECMA-262 3rd Edition -. Desembre 1999 JSON és un format de text que és completament independent del llenguatge però utilitza convencions que són familiars per als programadors de la C-família de llenguatges, incloent C , C + +, C #, Java, JavaScript, Perl, Python, i molts altres. Aquestes propietats fan de JSON un llenguatge ideal-l'intercanvi de dades.&lt;br /&gt;
JSON es basa en dues estructures: &lt;br /&gt;
&lt;br /&gt;
*Una col·lecció de parells nom / valor. En diversos idiomes, això es realitza com un objecte, fitxa, estructura, diccionari, taula hash, llista amb clau, o una matriu associativa. &lt;br /&gt;
*Una llista ordenada de valors. En la majoria dels idiomes, això es realitza en forma de matriu, vector, llista o seqüència. &lt;br /&gt;
Es tracta d'estructures de dades universals. Pràcticament tots els llenguatges de programació moderns els donen suport d'una manera o altra. Té sentit que un format de dades que és intercanviable amb els llenguatges de programació també es basarà en aquestes estructures.&lt;br /&gt;
&lt;br /&gt;
Com que utilitza la sintaxi de JSON amb JavaScript sense necessitat de programari addicional que es necessita per treballar amb JSON en JavaScript. &lt;br /&gt;
&lt;br /&gt;
Exemples de Json&lt;br /&gt;
&lt;br /&gt;
El principi bàsic és amb parells atribut-valor, aquests han d'estar tancats entre claus {,} que és el que defineixen l'inici i la fi de l'objecte.&lt;br /&gt;
&lt;br /&gt;
== Parell Nom/Valor ==&lt;br /&gt;
Generador JSON https://www.json-generator.com/&lt;br /&gt;
&lt;br /&gt;
Les dades en format JSON està escrit en forma de parells nom / valor. &lt;br /&gt;
&lt;br /&gt;
Un parell de nom / valor consisteix en un nom de camp (entre cometes), seguit de dos punts, seguit d'un valor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;firstName&amp;quot; : &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això és fàcil d'entendre, i és igual a la instrucció de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valors Json:&lt;br /&gt;
&lt;br /&gt;
*Un nombre (sencer o punt flotant) &lt;br /&gt;
*Una cadena (entre cometes) &lt;br /&gt;
*Booleà (cert o fals) &lt;br /&gt;
*Un conjunt (entre claudàtors) &lt;br /&gt;
*Un objecte (entre claus) &lt;br /&gt;
*nul&lt;br /&gt;
&lt;br /&gt;
==JSON Objects==&lt;br /&gt;
Objectes JSON s'escriuen entre claus, &lt;br /&gt;
&lt;br /&gt;
Els objectes poden contenir diversos parells de noms / valors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
  &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això també és fàcil d'entendre, i és igual a les sentències de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;;&lt;br /&gt;
lastName = &amp;quot;Doe&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JSON Array==&lt;br /&gt;
Arrays JSON s'escriuen entre claudàtors. &lt;br /&gt;
&lt;br /&gt;
Una matriu pot contenir diversos objectes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;profes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En l'exemple anterior, l'objecte &amp;quot;empleats&amp;quot; és una matriu que conté tres objectes. Cada objecte és un registre d'una persona (amb un nom i un cognom).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var profes=[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
profes[0].firstName + &amp;quot; &amp;quot; + profes[0].lastName;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-------------------&lt;br /&gt;
'''EXEMPLES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
//Ejemplo de JSON para un objeto tipo Persona&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:30,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Española&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;182 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Json amb booleans, nombre, cadenes i un objecte direcció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Fulano Probencio&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:27,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Chileno&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;172 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75,&lt;br /&gt;
&amp;quot;pasatiempos&amp;quot;:[&amp;quot;Polo&amp;quot;,&amp;quot;Cricket&amp;quot;,&amp;quot;Ski&amp;quot;,&amp;quot;Drafting&amp;quot;,&amp;quot;Gaming&amp;quot;],&lt;br /&gt;
&amp;quot;soltero&amp;quot;:true,&lt;br /&gt;
&amp;quot;direccion&amp;quot;:{&lt;br /&gt;
    &amp;quot;calle&amp;quot;:&amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
    &amp;quot;numero&amp;quot;:&amp;quot;123&amp;quot;,&lt;br /&gt;
    &amp;quot;pais&amp;quot;:&amp;quot;México&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un array de objectes persona.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;personas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 30,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Española&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;182 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 75,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Polo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cricket&amp;quot;,&lt;br /&gt;
                &amp;quot;Ski&amp;quot;,&lt;br /&gt;
                &amp;quot;Drafting&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;España&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Ramón&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 22,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Catalana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;178 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 72,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Pintar&amp;quot;,&lt;br /&gt;
                &amp;quot;Programar&amp;quot;,&lt;br /&gt;
                &amp;quot;Scuba Diving&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Catalana&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Amiga Pepita&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 25,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Cubana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;167 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Natación&amp;quot;,&lt;br /&gt;
                &amp;quot;Alpinismo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cinéfila&amp;quot;,&lt;br /&gt;
                &amp;quot;Socializar&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Cerro del Estudiante&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;456&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Argentina&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
Exemple 1 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;employees&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple 2 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var JSONObject={&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;John Johnson&amp;quot;,&lt;br /&gt;
  &amp;quot;street&amp;quot;: &amp;quot;Oslo West 555&amp;quot;,&lt;br /&gt;
  &amp;quot;age&amp;quot;: 33,&lt;br /&gt;
  &amp;quot;phone&amp;quot;: &amp;quot;555 1234567&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;jname&amp;quot;).innerHTML=JSONObject.name;&lt;br /&gt;
document.getElementById(&amp;quot;jage&amp;quot;).innerHTML=JSONObject.age;&lt;br /&gt;
document.getElementById(&amp;quot;jstreet&amp;quot;).innerHTML=JSONObject.street;&lt;br /&gt;
document.getElementById(&amp;quot;jphone&amp;quot;).innerHTML=JSONObject.phone;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Validadors de json'''&lt;br /&gt;
&lt;br /&gt;
http://jsonviewer.stack.hu/&lt;br /&gt;
&lt;br /&gt;
http://jsonlint.com/&lt;br /&gt;
&lt;br /&gt;
==La conversió d'un text JSON a un objecte JavaScript==&lt;br /&gt;
&lt;br /&gt;
'''NO RECOMENDADO'''&lt;br /&gt;
&lt;br /&gt;
http://www.etnassoft.com/2011/01/05/javascript-eval-uso-y-alternativas/&lt;br /&gt;
&lt;br /&gt;
Crear una cadena de JavaScript que conté la sintaxi de JSON:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var txt = '{ &amp;quot;employees&amp;quot; : [' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;John&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Doe&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Anna&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Smith&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Peter&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Jones&amp;quot; } ]}';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxi JSON és un subconjunt de la sintaxi de JavaScript, la funció eval () de JavaScript es pot utilitzar per convertir un text JSON en un objecte de JavaScript. &lt;br /&gt;
&lt;br /&gt;
La funció eval () utilitza el compilador de JavaScript que analitzar el text JSON i produeix un objecte de JavaScript. El text ha de ser embolicat amb parèntesi per evitar un error de sintaxi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj = eval (&amp;quot;(&amp;quot; + txt + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
First Name: &amp;lt;span id=&amp;quot;fname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
Last Name: &amp;lt;span id=&amp;quot;lname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;fname&amp;quot;).innerHTML = obj.employees[1].firstName;&lt;br /&gt;
document.getElementById(&amp;quot;lname&amp;quot;).innerHTML = obj.employees[1].lastName; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
És més segur utilitzar un analitzador JSON per a convertir un text JSON en un objecte de JavaScript. Un analitzador JSON reconeixerà només text JSON i no compilar scripts. &lt;br /&gt;
&lt;br /&gt;
En els navegadors que donen suport JSON natiu, analitzadors JSON són també més ràpid. &lt;br /&gt;
&lt;br /&gt;
Suport JSON nadiu està inclòs en tots els principals navegadors i en l'últim estàndard ECMAScript (JavaScript).&lt;br /&gt;
&lt;br /&gt;
== JAVASCRIPT &amp;amp; JSON ==&lt;br /&gt;
&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JAVASCRIPT)===&lt;br /&gt;
*Es pot fer amb la llibreria nativa de JSON per javascript (Javascript)&lt;br /&gt;
*la llibreria tracta una cadena de text i el transforma com a objecte JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myObject = JSON.parse('{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.w3schools.com/js/js_json_parse.asp&lt;br /&gt;
&lt;br /&gt;
=== Donat un objecte JSON converti-lo en Text ===&lt;br /&gt;
&lt;br /&gt;
* Transforma tot el contingut de un objecte Json a string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myJSONText = JSON.stringify(myObject);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Més informació a https://www.w3schools.com/js/js_json_stringify.asp&lt;br /&gt;
&lt;br /&gt;
== PHP &amp;amp; JSON ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = {&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un JSON desde PHP (json_encode)'''&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un objeto en PHP con JSON (json_decode)'''&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery &amp;amp; JSON ==&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JQUERY)===&lt;br /&gt;
* Es pot fer amb la funció Jquery.parse(): rep una cadena JSON ben formatada i retorna l'objecte JavaScript resultant. (JQuery)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = jQuery.parseJSON( '{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }' );&lt;br /&gt;
alert( obj.name === &amp;quot;John&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://api.jquery.com/jQuery.parseJSON/&lt;br /&gt;
&lt;br /&gt;
=== LLegir dades des de un fitxer JSON (JQUERY)===&lt;br /&gt;
Supossem que tenim un fitxer anonenat dades.json i el volem llegir amb Javascript.&lt;br /&gt;
Fitxer dades.json :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;users&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Ray&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Villalobos&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;January&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2012&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Jones&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;April&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 28,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2010&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
S'utilitza la funcion getJSON de jQuery:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jquery&amp;quot;&amp;gt;&lt;br /&gt;
$.getJSON('files/data.json', function(data) {&lt;br /&gt;
        var output=&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
        for (var i=0;i&amp;lt;data.users.length;i++) {&lt;br /&gt;
            output+=&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + data.users[i].firstName + &amp;quot; &amp;quot; + data.users[i].lastName + &amp;quot;--&amp;quot; + data.users[i].joined.month+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        output+=&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
        document.getElementById(&amp;quot;placeholder&amp;quot;).innerHTML=output;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ens mostrará en pantalla&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
   * Ray Villalobos--January&lt;br /&gt;
   * John Jones--April&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enviar un objecte JSON amb $.ajax() (JQUERY) ===&lt;br /&gt;
Exemple 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify({&lt;br /&gt;
            first_name: $(&amp;quot;#namec&amp;quot;).val(),&lt;br /&gt;
            last_name: $(&amp;quot;#surnamec&amp;quot;).val(),&lt;br /&gt;
            email: $(&amp;quot;#emailc&amp;quot;).val(),&lt;br /&gt;
            mobile: $(&amp;quot;#numberc&amp;quot;).val(),&lt;br /&gt;
            password: $(&amp;quot;#passwordc&amp;quot;).val()&lt;br /&gt;
        }),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = {};&lt;br /&gt;
&lt;br /&gt;
obj.first_name = $(&amp;quot;#namec&amp;quot;).val();&lt;br /&gt;
obj.last_name = $(&amp;quot;#surnamec&amp;quot;).val();&lt;br /&gt;
obj.email = $(&amp;quot;#emailc&amp;quot;).val();&lt;br /&gt;
obj.mobile = $(&amp;quot;#numberc&amp;quot;).val();&lt;br /&gt;
obj.password = $(&amp;quot;#passwordc&amp;quot;).val();&lt;br /&gt;
&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify(obj),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple 3:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    var parametros = {&lt;br /&gt;
                &amp;quot;valorCaja1&amp;quot; : valorCaja1,&lt;br /&gt;
                &amp;quot;valorCaja2&amp;quot; : valorCaja2&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        $.ajax({&lt;br /&gt;
                data:  parametros,&lt;br /&gt;
                url:   'ejemplo_ajax_proceso.php',&lt;br /&gt;
                type:  'post',&lt;br /&gt;
                beforeSend: function () {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(&amp;quot;Procesando, espere por favor...&amp;quot;);&lt;br /&gt;
                },&lt;br /&gt;
                success:  function (response) {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(response);&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XML =&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
== Creació de l'Arbre XML ==&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$file = &amp;quot;files/aules.xml&amp;quot;;&lt;br /&gt;
$xmldom = new DOMDocument();&lt;br /&gt;
$xmldom-&amp;gt;load($file);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenir un element de l'arbre ==&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recòrrer tots els elemens ==&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
foreach ($aules as $aula) {&lt;br /&gt;
    $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Afegir un nou element ==&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$auladom = $xmldom-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmldom-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($classroomName));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmldom-&amp;gt;createElement(XARXA_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($network));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmldom-&amp;gt;createElement(MASK_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($mask));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmldom-&amp;gt;createElement(INIT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmldom-&amp;gt;createElement(CURRENT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
$root = $xmldom-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmldom-&amp;gt;save($filename);  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Esborrar un element ==&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//funció que esborra un node i els seus fills&lt;br /&gt;
    function deleteNode($node) {&lt;br /&gt;
        deleteChildren($node);&lt;br /&gt;
        $parent = $node-&amp;gt;parentNode;&lt;br /&gt;
        $oldnode = $parent-&amp;gt;removeChild($node);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//funció que esborra els fills d'un node&lt;br /&gt;
    function deleteChildren($node) {&lt;br /&gt;
        while (isset($node-&amp;gt;firstChild)) {&lt;br /&gt;
            deleteChildren($node-&amp;gt;firstChild);&lt;br /&gt;
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
//funció que cerca al XML un node amb el nom=$classroomname    &lt;br /&gt;
    function delete($classroomName){&lt;br /&gt;
         $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
          foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                deleteNode($aula);&lt;br /&gt;
                $xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Modificar un valor ==&lt;br /&gt;
Per modificar un valor, primer es cerca i després es mira quin dels atributs es vol modificar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function setNewClassroomAttr($classroomName, $attr, $value)&lt;br /&gt;
    {&lt;br /&gt;
        $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
        foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                $aula-&amp;gt;getElementsByTagName($attr)-&amp;gt;item(0)-&amp;gt;nodeValue = strtolower($value);&lt;br /&gt;
                $this-&amp;gt;xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
=Traduïr un XML a JSON =&lt;br /&gt;
En el següent enllaç podem veure que els fitxers XML es poden traduir a sintaxi JSON. Tanmateix, quan els fitxers XML es compliquen, el seu equivalent JSON passa a ser bastant difícil de llegir i interpretar:&lt;br /&gt;
http://www.utilities-online.info/xmltojson/#.WjqMa2fWxMw&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EXERCICIS ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.Crea una aplicació que rep com paràmetre en un input una ciutat i després es realitza una consulta amb fetch que retorni el temps de la ciutat o que digui que no hi ha cap ciutat anomenada així.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Api d'on treurem el temps:&lt;br /&gt;
&lt;br /&gt;
http://neftali.clubdelphi.com/hablando-del-tiempo-openweathermap-12/&lt;br /&gt;
&lt;br /&gt;
*Exemple amb la ciutat Barcelona&lt;br /&gt;
http://api.openweathermap.org/data/2.5/find?&amp;amp;q=Barcelona,es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*Exemple html on mostra les dades obtingudes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
`&amp;lt;br&amp;gt;&amp;lt;h3 style=&amp;quot;display: inline;&amp;quot;&amp;gt;Ciudad: ${ciutat}&amp;lt;/h3&amp;gt; [lat = ${lat}, lon = ${lon} ] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Estado del cielo: &amp;lt;/b&amp;gt;${estado_cielo}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Descripción: &amp;lt;/b&amp;gt;${descripcion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Temperatura: &amp;lt;/b&amp;gt;${temp} K [Máx: ${tempmax}K, Mín: ${tempmin}K]&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;${presion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Humedad: &amp;lt;/b&amp;gt;${humedad}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; `&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
window.onload=function(){&lt;br /&gt;
  &lt;br /&gt;
  function consulta() {&lt;br /&gt;
    ciutat = document.getElementById(&amp;quot;tecla&amp;quot;).value;&lt;br /&gt;
    if(ciutat != null){&lt;br /&gt;
        url = `http://api.openweathermap.org/data/2.5/find?&amp;amp;q=${ciutat},es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19`&lt;br /&gt;
&lt;br /&gt;
        fetch(url)&lt;br /&gt;
                .then(function (response) {&lt;br /&gt;
                    if (response.ok) {&lt;br /&gt;
                        return response.text()&lt;br /&gt;
                    } else {&lt;br /&gt;
                        throw &amp;quot;Error a la crida Ajax&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                })&lt;br /&gt;
                .then(function (responseText) {&lt;br /&gt;
                    var myObject = JSON.parse(responseText);&lt;br /&gt;
&lt;br /&gt;
                    if (myObject.count==0){&lt;br /&gt;
                        document.getElementById('resultado').innerHTML = &amp;quot;La ciutat no existeix&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                    else{&lt;br /&gt;
                        dades = myObject.list[0];&lt;br /&gt;
&lt;br /&gt;
                        ciudad = dades.name;&lt;br /&gt;
                        lat = dades.coord.lat;&lt;br /&gt;
                        lon = dades.coord.lon;&lt;br /&gt;
                        temp = dades.main.temp;&lt;br /&gt;
                        tempmax = dades.main.temp_max;&lt;br /&gt;
                        tempmin = dades.main.temp_min;&lt;br /&gt;
                        presion = dades.main.pressure;&lt;br /&gt;
                        humedad = dades.main.humidity;&lt;br /&gt;
                        vel_viento = dades.main.temp;&lt;br /&gt;
                        estado_cielo = dades.weather[0].main;&lt;br /&gt;
                        descripcion = dades.weather[0].description;&lt;br /&gt;
&lt;br /&gt;
                        document.getElementById('resultado').innerHTML =  `&amp;lt;br&amp;gt;&amp;lt;h3 style=&amp;quot;display: inline;&amp;quot;&amp;gt;Ciudad: ${ciutat}&amp;lt;/h3&amp;gt; [lat = ${lat}, lon = ${lon} ] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Estado del cielo: &amp;lt;/b&amp;gt;${estado_cielo}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Descripción: &amp;lt;/b&amp;gt;${descripcion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Temperatura: &amp;lt;/b&amp;gt;${temp} K [Máx: ${tempmax}K, Mín: ${tempmin}K]&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;${presion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Humedad: &amp;lt;/b&amp;gt;${humedad}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; `&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
                })&lt;br /&gt;
                .catch(function (err) {&lt;br /&gt;
                    console.log(err);&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
 document.getElementById(&amp;quot;b&amp;quot;).onclick=consulta;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
      &lt;br /&gt;
      &amp;lt;label&amp;gt;Ciudad: &amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;tecla&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;ciudad&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;b&amp;quot; type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;OK&amp;quot; /&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
1.b) Es vol retornar el json del temps al client.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_temps]]&lt;br /&gt;
&lt;br /&gt;
2. Tenim un fitxer Json al servidor, volem carregar aquest fitxer i treballar amb la seua informació. &lt;br /&gt;
&lt;br /&gt;
http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Se desea hacer un cuadrado de 100 x 100 px que se vaya desplazando en función de las teclas que se presionen (arriba abajo derecha izquierda)....&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17969</id>
		<title>M6 - Desenvolupament web en entorn client</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17969"/>
				<updated>2024-04-19T13:59:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* UF4. Comunicació asíncrona client-servidor. (40h) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== UF1 : Sintaxis del llenguatge. Objectes predefinits del llenguatge (33h) ==&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Arquitectures i tecnologies de la programació Web en entorn client]] ===&lt;br /&gt;
=== [[NF2 - Sintaxi Javascript]] ===&lt;br /&gt;
=== [[NF3 - Objectes predefinits del llenguatge Javascript]] ===&lt;br /&gt;
&lt;br /&gt;
== UF2 : Estructures definides pel programador. Objectes (30h) ==&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Funcions]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Objectes]] ===&lt;br /&gt;
&lt;br /&gt;
== UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h)  ==&lt;br /&gt;
=== [[NF1 - Esdeveniments i Validacio de formularis]] ===&lt;br /&gt;
=== [[NF2 - Model d'objectes del document]] ===&lt;br /&gt;
=== [[JQUERY]] ===&lt;br /&gt;
=== [[VUEJS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Això estava comentat&lt;br /&gt;
=== [[NF3 - JQUERY]] === &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UF4. Comunicació asíncrona client-servidor. (40h) ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''NF1'''&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== [[NF1 - AJAX]] ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[NF1 - WEBSOCKETS]] ===&lt;br /&gt;
&lt;br /&gt;
'''NF2'''&lt;br /&gt;
=== [[JQUERY - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
[https://jqueryui.com/ JQueryUI]&lt;br /&gt;
&lt;br /&gt;
'''NF3'''&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== [[NF3 - XML i JSON]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === [[NF2 - JQUERY-AJAX]]=== Això estava comentat--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[VUEJS - AJAX]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISCEL·LÀNIA ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://shopify.github.io/draggable/&lt;br /&gt;
https://haltu.github.io/muuri/&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17955</id>
		<title>NF3 - XML i JSON</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17955"/>
				<updated>2024-04-12T17:33:42Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* EXERCICIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON =&lt;br /&gt;
JSON (JavaScript Object Notation) és un format d'intercanvi de dades lleuger. És fàcil per als éssers humans a llegir i escriure. És fàcil per a les màquines per analitzar i generar. Es basa en un subconjunt del llenguatge de programació JavaScript, estàndard ECMA-262 3rd Edition -. Desembre 1999 JSON és un format de text que és completament independent del llenguatge però utilitza convencions que són familiars per als programadors de la C-família de llenguatges, incloent C , C + +, C #, Java, JavaScript, Perl, Python, i molts altres. Aquestes propietats fan de JSON un llenguatge ideal-l'intercanvi de dades.&lt;br /&gt;
JSON es basa en dues estructures: &lt;br /&gt;
&lt;br /&gt;
*Una col·lecció de parells nom / valor. En diversos idiomes, això es realitza com un objecte, fitxa, estructura, diccionari, taula hash, llista amb clau, o una matriu associativa. &lt;br /&gt;
*Una llista ordenada de valors. En la majoria dels idiomes, això es realitza en forma de matriu, vector, llista o seqüència. &lt;br /&gt;
Es tracta d'estructures de dades universals. Pràcticament tots els llenguatges de programació moderns els donen suport d'una manera o altra. Té sentit que un format de dades que és intercanviable amb els llenguatges de programació també es basarà en aquestes estructures.&lt;br /&gt;
&lt;br /&gt;
Com que utilitza la sintaxi de JSON amb JavaScript sense necessitat de programari addicional que es necessita per treballar amb JSON en JavaScript. &lt;br /&gt;
&lt;br /&gt;
Exemples de Json&lt;br /&gt;
&lt;br /&gt;
El principi bàsic és amb parells atribut-valor, aquests han d'estar tancats entre claus {,} que és el que defineixen l'inici i la fi de l'objecte.&lt;br /&gt;
&lt;br /&gt;
== Parell Nom/Valor ==&lt;br /&gt;
Generador JSON https://www.json-generator.com/&lt;br /&gt;
&lt;br /&gt;
Les dades en format JSON està escrit en forma de parells nom / valor. &lt;br /&gt;
&lt;br /&gt;
Un parell de nom / valor consisteix en un nom de camp (entre cometes), seguit de dos punts, seguit d'un valor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;firstName&amp;quot; : &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això és fàcil d'entendre, i és igual a la instrucció de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valors Json:&lt;br /&gt;
&lt;br /&gt;
*Un nombre (sencer o punt flotant) &lt;br /&gt;
*Una cadena (entre cometes) &lt;br /&gt;
*Booleà (cert o fals) &lt;br /&gt;
*Un conjunt (entre claudàtors) &lt;br /&gt;
*Un objecte (entre claus) &lt;br /&gt;
*nul&lt;br /&gt;
&lt;br /&gt;
==JSON Objects==&lt;br /&gt;
Objectes JSON s'escriuen entre claus, &lt;br /&gt;
&lt;br /&gt;
Els objectes poden contenir diversos parells de noms / valors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
  &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això també és fàcil d'entendre, i és igual a les sentències de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;;&lt;br /&gt;
lastName = &amp;quot;Doe&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JSON Array==&lt;br /&gt;
Arrays JSON s'escriuen entre claudàtors. &lt;br /&gt;
&lt;br /&gt;
Una matriu pot contenir diversos objectes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;profes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En l'exemple anterior, l'objecte &amp;quot;empleats&amp;quot; és una matriu que conté tres objectes. Cada objecte és un registre d'una persona (amb un nom i un cognom).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var profes=[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
profes[0].firstName + &amp;quot; &amp;quot; + profes[0].lastName;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-------------------&lt;br /&gt;
'''EXEMPLES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
//Ejemplo de JSON para un objeto tipo Persona&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:30,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Española&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;182 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Json amb booleans, nombre, cadenes i un objecte direcció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Fulano Probencio&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:27,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Chileno&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;172 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75,&lt;br /&gt;
&amp;quot;pasatiempos&amp;quot;:[&amp;quot;Polo&amp;quot;,&amp;quot;Cricket&amp;quot;,&amp;quot;Ski&amp;quot;,&amp;quot;Drafting&amp;quot;,&amp;quot;Gaming&amp;quot;],&lt;br /&gt;
&amp;quot;soltero&amp;quot;:true,&lt;br /&gt;
&amp;quot;direccion&amp;quot;:{&lt;br /&gt;
    &amp;quot;calle&amp;quot;:&amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
    &amp;quot;numero&amp;quot;:&amp;quot;123&amp;quot;,&lt;br /&gt;
    &amp;quot;pais&amp;quot;:&amp;quot;México&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un array de objectes persona.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;personas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 30,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Española&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;182 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 75,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Polo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cricket&amp;quot;,&lt;br /&gt;
                &amp;quot;Ski&amp;quot;,&lt;br /&gt;
                &amp;quot;Drafting&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;España&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Ramón&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 22,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Catalana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;178 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 72,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Pintar&amp;quot;,&lt;br /&gt;
                &amp;quot;Programar&amp;quot;,&lt;br /&gt;
                &amp;quot;Scuba Diving&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Catalana&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Amiga Pepita&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 25,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Cubana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;167 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Natación&amp;quot;,&lt;br /&gt;
                &amp;quot;Alpinismo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cinéfila&amp;quot;,&lt;br /&gt;
                &amp;quot;Socializar&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Cerro del Estudiante&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;456&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Argentina&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
Exemple 1 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;employees&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple 2 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var JSONObject={&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;John Johnson&amp;quot;,&lt;br /&gt;
  &amp;quot;street&amp;quot;: &amp;quot;Oslo West 555&amp;quot;,&lt;br /&gt;
  &amp;quot;age&amp;quot;: 33,&lt;br /&gt;
  &amp;quot;phone&amp;quot;: &amp;quot;555 1234567&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;jname&amp;quot;).innerHTML=JSONObject.name;&lt;br /&gt;
document.getElementById(&amp;quot;jage&amp;quot;).innerHTML=JSONObject.age;&lt;br /&gt;
document.getElementById(&amp;quot;jstreet&amp;quot;).innerHTML=JSONObject.street;&lt;br /&gt;
document.getElementById(&amp;quot;jphone&amp;quot;).innerHTML=JSONObject.phone;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Validadors de json'''&lt;br /&gt;
&lt;br /&gt;
http://jsonviewer.stack.hu/&lt;br /&gt;
&lt;br /&gt;
http://jsonlint.com/&lt;br /&gt;
&lt;br /&gt;
==La conversió d'un text JSON a un objecte JavaScript==&lt;br /&gt;
&lt;br /&gt;
'''NO RECOMENDADO'''&lt;br /&gt;
&lt;br /&gt;
http://www.etnassoft.com/2011/01/05/javascript-eval-uso-y-alternativas/&lt;br /&gt;
&lt;br /&gt;
Crear una cadena de JavaScript que conté la sintaxi de JSON:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var txt = '{ &amp;quot;employees&amp;quot; : [' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;John&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Doe&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Anna&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Smith&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Peter&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Jones&amp;quot; } ]}';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxi JSON és un subconjunt de la sintaxi de JavaScript, la funció eval () de JavaScript es pot utilitzar per convertir un text JSON en un objecte de JavaScript. &lt;br /&gt;
&lt;br /&gt;
La funció eval () utilitza el compilador de JavaScript que analitzar el text JSON i produeix un objecte de JavaScript. El text ha de ser embolicat amb parèntesi per evitar un error de sintaxi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj = eval (&amp;quot;(&amp;quot; + txt + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
First Name: &amp;lt;span id=&amp;quot;fname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
Last Name: &amp;lt;span id=&amp;quot;lname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;fname&amp;quot;).innerHTML = obj.employees[1].firstName;&lt;br /&gt;
document.getElementById(&amp;quot;lname&amp;quot;).innerHTML = obj.employees[1].lastName; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
És més segur utilitzar un analitzador JSON per a convertir un text JSON en un objecte de JavaScript. Un analitzador JSON reconeixerà només text JSON i no compilar scripts. &lt;br /&gt;
&lt;br /&gt;
En els navegadors que donen suport JSON natiu, analitzadors JSON són també més ràpid. &lt;br /&gt;
&lt;br /&gt;
Suport JSON nadiu està inclòs en tots els principals navegadors i en l'últim estàndard ECMAScript (JavaScript).&lt;br /&gt;
&lt;br /&gt;
== JAVASCRIPT &amp;amp; JSON ==&lt;br /&gt;
&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JAVASCRIPT)===&lt;br /&gt;
*Es pot fer amb la llibreria nativa de JSON per javascript (Javascript)&lt;br /&gt;
*la llibreria tracta una cadena de text i el transforma com a objecte JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myObject = JSON.parse('{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.w3schools.com/js/js_json_parse.asp&lt;br /&gt;
&lt;br /&gt;
=== Donat un objecte JSON converti-lo en Text ===&lt;br /&gt;
&lt;br /&gt;
* Transforma tot el contingut de un objecte Json a string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myJSONText = JSON.stringify(myObject);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Més informació a https://www.w3schools.com/js/js_json_stringify.asp&lt;br /&gt;
&lt;br /&gt;
== PHP &amp;amp; JSON ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = {&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un JSON desde PHP (json_encode)'''&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un objeto en PHP con JSON (json_decode)'''&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery &amp;amp; JSON ==&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JQUERY)===&lt;br /&gt;
* Es pot fer amb la funció Jquery.parse(): rep una cadena JSON ben formatada i retorna l'objecte JavaScript resultant. (JQuery)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = jQuery.parseJSON( '{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }' );&lt;br /&gt;
alert( obj.name === &amp;quot;John&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://api.jquery.com/jQuery.parseJSON/&lt;br /&gt;
&lt;br /&gt;
=== LLegir dades des de un fitxer JSON (JQUERY)===&lt;br /&gt;
Supossem que tenim un fitxer anonenat dades.json i el volem llegir amb Javascript.&lt;br /&gt;
Fitxer dades.json :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;users&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Ray&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Villalobos&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;January&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2012&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Jones&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;April&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 28,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2010&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
S'utilitza la funcion getJSON de jQuery:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jquery&amp;quot;&amp;gt;&lt;br /&gt;
$.getJSON('files/data.json', function(data) {&lt;br /&gt;
        var output=&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
        for (var i=0;i&amp;lt;data.users.length;i++) {&lt;br /&gt;
            output+=&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + data.users[i].firstName + &amp;quot; &amp;quot; + data.users[i].lastName + &amp;quot;--&amp;quot; + data.users[i].joined.month+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        output+=&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
        document.getElementById(&amp;quot;placeholder&amp;quot;).innerHTML=output;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ens mostrará en pantalla&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
   * Ray Villalobos--January&lt;br /&gt;
   * John Jones--April&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enviar un objecte JSON amb $.ajax() (JQUERY) ===&lt;br /&gt;
Exemple 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify({&lt;br /&gt;
            first_name: $(&amp;quot;#namec&amp;quot;).val(),&lt;br /&gt;
            last_name: $(&amp;quot;#surnamec&amp;quot;).val(),&lt;br /&gt;
            email: $(&amp;quot;#emailc&amp;quot;).val(),&lt;br /&gt;
            mobile: $(&amp;quot;#numberc&amp;quot;).val(),&lt;br /&gt;
            password: $(&amp;quot;#passwordc&amp;quot;).val()&lt;br /&gt;
        }),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = {};&lt;br /&gt;
&lt;br /&gt;
obj.first_name = $(&amp;quot;#namec&amp;quot;).val();&lt;br /&gt;
obj.last_name = $(&amp;quot;#surnamec&amp;quot;).val();&lt;br /&gt;
obj.email = $(&amp;quot;#emailc&amp;quot;).val();&lt;br /&gt;
obj.mobile = $(&amp;quot;#numberc&amp;quot;).val();&lt;br /&gt;
obj.password = $(&amp;quot;#passwordc&amp;quot;).val();&lt;br /&gt;
&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify(obj),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple 3:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    var parametros = {&lt;br /&gt;
                &amp;quot;valorCaja1&amp;quot; : valorCaja1,&lt;br /&gt;
                &amp;quot;valorCaja2&amp;quot; : valorCaja2&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        $.ajax({&lt;br /&gt;
                data:  parametros,&lt;br /&gt;
                url:   'ejemplo_ajax_proceso.php',&lt;br /&gt;
                type:  'post',&lt;br /&gt;
                beforeSend: function () {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(&amp;quot;Procesando, espere por favor...&amp;quot;);&lt;br /&gt;
                },&lt;br /&gt;
                success:  function (response) {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(response);&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XML =&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
== Creació de l'Arbre XML ==&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$file = &amp;quot;files/aules.xml&amp;quot;;&lt;br /&gt;
$xmldom = new DOMDocument();&lt;br /&gt;
$xmldom-&amp;gt;load($file);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenir un element de l'arbre ==&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recòrrer tots els elemens ==&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
foreach ($aules as $aula) {&lt;br /&gt;
    $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Afegir un nou element ==&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$auladom = $xmldom-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmldom-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($classroomName));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmldom-&amp;gt;createElement(XARXA_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($network));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmldom-&amp;gt;createElement(MASK_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($mask));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmldom-&amp;gt;createElement(INIT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmldom-&amp;gt;createElement(CURRENT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
$root = $xmldom-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmldom-&amp;gt;save($filename);  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Esborrar un element ==&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//funció que esborra un node i els seus fills&lt;br /&gt;
    function deleteNode($node) {&lt;br /&gt;
        deleteChildren($node);&lt;br /&gt;
        $parent = $node-&amp;gt;parentNode;&lt;br /&gt;
        $oldnode = $parent-&amp;gt;removeChild($node);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//funció que esborra els fills d'un node&lt;br /&gt;
    function deleteChildren($node) {&lt;br /&gt;
        while (isset($node-&amp;gt;firstChild)) {&lt;br /&gt;
            deleteChildren($node-&amp;gt;firstChild);&lt;br /&gt;
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
//funció que cerca al XML un node amb el nom=$classroomname    &lt;br /&gt;
    function delete($classroomName){&lt;br /&gt;
         $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
          foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                deleteNode($aula);&lt;br /&gt;
                $xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Modificar un valor ==&lt;br /&gt;
Per modificar un valor, primer es cerca i després es mira quin dels atributs es vol modificar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function setNewClassroomAttr($classroomName, $attr, $value)&lt;br /&gt;
    {&lt;br /&gt;
        $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
        foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                $aula-&amp;gt;getElementsByTagName($attr)-&amp;gt;item(0)-&amp;gt;nodeValue = strtolower($value);&lt;br /&gt;
                $this-&amp;gt;xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
=Traduïr un XML a JSON =&lt;br /&gt;
En el següent enllaç podem veure que els fitxers XML es poden traduir a sintaxi JSON. Tanmateix, quan els fitxers XML es compliquen, el seu equivalent JSON passa a ser bastant difícil de llegir i interpretar:&lt;br /&gt;
http://www.utilities-online.info/xmltojson/#.WjqMa2fWxMw&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EXERCICIS ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.Crea una aplicació que rep com paràmetre en un input una ciutat i després es realitza una consulta amb fetch que retorni el temps de la ciutat o que digui que no hi ha cap ciutat anomenada així.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Api d'on treurem el temps:&lt;br /&gt;
&lt;br /&gt;
http://neftali.clubdelphi.com/hablando-del-tiempo-openweathermap-12/&lt;br /&gt;
&lt;br /&gt;
*Exemple amb la ciutat Barcelona&lt;br /&gt;
http://api.openweathermap.org/data/2.5/find?&amp;amp;q=Barcelona,es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*Exemple html on mostra les dades obtingudes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
`&amp;lt;br&amp;gt;&amp;lt;h3 style=&amp;quot;display: inline;&amp;quot;&amp;gt;Ciudad: ${ciutat}&amp;lt;/h3&amp;gt; [lat = ${lat}, lon = ${lon} ] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Estado del cielo: &amp;lt;/b&amp;gt;${estado_cielo}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Descripción: &amp;lt;/b&amp;gt;${descripcion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Temperatura: &amp;lt;/b&amp;gt;${temp} K [Máx: ${tempmax}K, Mín: ${tempmin}K]&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;${presion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Humedad: &amp;lt;/b&amp;gt;${humedad}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; `&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
window.onload=function(){&lt;br /&gt;
  &lt;br /&gt;
  function consulta() {&lt;br /&gt;
    ciutat = document.getElementById(&amp;quot;tecla&amp;quot;).value;&lt;br /&gt;
    if(ciutat != null){&lt;br /&gt;
        url = `http://api.openweathermap.org/data/2.5/find?&amp;amp;q=${ciutat},es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19`&lt;br /&gt;
&lt;br /&gt;
        fetch(url)&lt;br /&gt;
                .then(function (response) {&lt;br /&gt;
                    if (response.ok) {&lt;br /&gt;
                        return response.text()&lt;br /&gt;
                    } else {&lt;br /&gt;
                        throw &amp;quot;Error a la crida Ajax&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                })&lt;br /&gt;
                .then(function (responseText) {&lt;br /&gt;
                    var myObject = JSON.parse(responseText);&lt;br /&gt;
&lt;br /&gt;
                    if (myObject.count==0){&lt;br /&gt;
                        document.getElementById('resultado').innerHTML = &amp;quot;La ciutat no existeix&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                    else{&lt;br /&gt;
                        dades = myObject.list[0];&lt;br /&gt;
&lt;br /&gt;
                        ciudad = dades.name;&lt;br /&gt;
                        lat = dades.coord.lat;&lt;br /&gt;
                        lon = dades.coord.lon;&lt;br /&gt;
                        temp = dades.main.temp;&lt;br /&gt;
                        tempmax = dades.main.temp_max;&lt;br /&gt;
                        tempmin = dades.main.temp_min;&lt;br /&gt;
                        presion = dades.main.pressure;&lt;br /&gt;
                        humedad = dades.main.humidity;&lt;br /&gt;
                        vel_viento = dades.main.temp;&lt;br /&gt;
                        estado_cielo = dades.weather[0].main;&lt;br /&gt;
                        descripcion = dades.weather[0].description;&lt;br /&gt;
&lt;br /&gt;
                        document.getElementById('resultado').innerHTML =  `&amp;lt;br&amp;gt;&amp;lt;h3 style=&amp;quot;display: inline;&amp;quot;&amp;gt;Ciudad: ${ciutat}&amp;lt;/h3&amp;gt; [lat = ${lat}, lon = ${lon} ] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Estado del cielo: &amp;lt;/b&amp;gt;${estado_cielo}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Descripción: &amp;lt;/b&amp;gt;${descripcion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Temperatura: &amp;lt;/b&amp;gt;${temp} K [Máx: ${tempmax}K, Mín: ${tempmin}K]&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;${presion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Humedad: &amp;lt;/b&amp;gt;${humedad}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; `&lt;br /&gt;
&lt;br /&gt;
                    }&lt;br /&gt;
                })&lt;br /&gt;
                .catch(function (err) {&lt;br /&gt;
                    console.log(err);&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
 document.getElementById(&amp;quot;b&amp;quot;).onclick=consulta;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
      &lt;br /&gt;
      &amp;lt;label&amp;gt;Ciudad: &amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;tecla&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;ciudad&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;b&amp;quot; type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;OK&amp;quot; /&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.b) Es vol retornar el json del temps al client.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_temps]]&lt;br /&gt;
&lt;br /&gt;
2. Tenim un fitxer Json al servidor, volem carregar aquest fitxer i treballar amb la seua informació. &lt;br /&gt;
&lt;br /&gt;
http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Se desea hacer un cuadrado de 100 x 100 px que se vaya desplazando en función de las teclas que se presionen (arriba abajo derecha izquierda)....&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17954</id>
		<title>NF3 - XML i JSON</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17954"/>
				<updated>2024-04-12T17:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* EXERCICIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON =&lt;br /&gt;
JSON (JavaScript Object Notation) és un format d'intercanvi de dades lleuger. És fàcil per als éssers humans a llegir i escriure. És fàcil per a les màquines per analitzar i generar. Es basa en un subconjunt del llenguatge de programació JavaScript, estàndard ECMA-262 3rd Edition -. Desembre 1999 JSON és un format de text que és completament independent del llenguatge però utilitza convencions que són familiars per als programadors de la C-família de llenguatges, incloent C , C + +, C #, Java, JavaScript, Perl, Python, i molts altres. Aquestes propietats fan de JSON un llenguatge ideal-l'intercanvi de dades.&lt;br /&gt;
JSON es basa en dues estructures: &lt;br /&gt;
&lt;br /&gt;
*Una col·lecció de parells nom / valor. En diversos idiomes, això es realitza com un objecte, fitxa, estructura, diccionari, taula hash, llista amb clau, o una matriu associativa. &lt;br /&gt;
*Una llista ordenada de valors. En la majoria dels idiomes, això es realitza en forma de matriu, vector, llista o seqüència. &lt;br /&gt;
Es tracta d'estructures de dades universals. Pràcticament tots els llenguatges de programació moderns els donen suport d'una manera o altra. Té sentit que un format de dades que és intercanviable amb els llenguatges de programació també es basarà en aquestes estructures.&lt;br /&gt;
&lt;br /&gt;
Com que utilitza la sintaxi de JSON amb JavaScript sense necessitat de programari addicional que es necessita per treballar amb JSON en JavaScript. &lt;br /&gt;
&lt;br /&gt;
Exemples de Json&lt;br /&gt;
&lt;br /&gt;
El principi bàsic és amb parells atribut-valor, aquests han d'estar tancats entre claus {,} que és el que defineixen l'inici i la fi de l'objecte.&lt;br /&gt;
&lt;br /&gt;
== Parell Nom/Valor ==&lt;br /&gt;
Generador JSON https://www.json-generator.com/&lt;br /&gt;
&lt;br /&gt;
Les dades en format JSON està escrit en forma de parells nom / valor. &lt;br /&gt;
&lt;br /&gt;
Un parell de nom / valor consisteix en un nom de camp (entre cometes), seguit de dos punts, seguit d'un valor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;firstName&amp;quot; : &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això és fàcil d'entendre, i és igual a la instrucció de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valors Json:&lt;br /&gt;
&lt;br /&gt;
*Un nombre (sencer o punt flotant) &lt;br /&gt;
*Una cadena (entre cometes) &lt;br /&gt;
*Booleà (cert o fals) &lt;br /&gt;
*Un conjunt (entre claudàtors) &lt;br /&gt;
*Un objecte (entre claus) &lt;br /&gt;
*nul&lt;br /&gt;
&lt;br /&gt;
==JSON Objects==&lt;br /&gt;
Objectes JSON s'escriuen entre claus, &lt;br /&gt;
&lt;br /&gt;
Els objectes poden contenir diversos parells de noms / valors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
  &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això també és fàcil d'entendre, i és igual a les sentències de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;;&lt;br /&gt;
lastName = &amp;quot;Doe&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JSON Array==&lt;br /&gt;
Arrays JSON s'escriuen entre claudàtors. &lt;br /&gt;
&lt;br /&gt;
Una matriu pot contenir diversos objectes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;profes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En l'exemple anterior, l'objecte &amp;quot;empleats&amp;quot; és una matriu que conté tres objectes. Cada objecte és un registre d'una persona (amb un nom i un cognom).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var profes=[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
profes[0].firstName + &amp;quot; &amp;quot; + profes[0].lastName;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-------------------&lt;br /&gt;
'''EXEMPLES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
//Ejemplo de JSON para un objeto tipo Persona&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:30,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Española&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;182 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Json amb booleans, nombre, cadenes i un objecte direcció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Fulano Probencio&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:27,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Chileno&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;172 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75,&lt;br /&gt;
&amp;quot;pasatiempos&amp;quot;:[&amp;quot;Polo&amp;quot;,&amp;quot;Cricket&amp;quot;,&amp;quot;Ski&amp;quot;,&amp;quot;Drafting&amp;quot;,&amp;quot;Gaming&amp;quot;],&lt;br /&gt;
&amp;quot;soltero&amp;quot;:true,&lt;br /&gt;
&amp;quot;direccion&amp;quot;:{&lt;br /&gt;
    &amp;quot;calle&amp;quot;:&amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
    &amp;quot;numero&amp;quot;:&amp;quot;123&amp;quot;,&lt;br /&gt;
    &amp;quot;pais&amp;quot;:&amp;quot;México&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un array de objectes persona.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;personas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 30,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Española&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;182 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 75,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Polo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cricket&amp;quot;,&lt;br /&gt;
                &amp;quot;Ski&amp;quot;,&lt;br /&gt;
                &amp;quot;Drafting&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;España&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Ramón&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 22,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Catalana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;178 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 72,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Pintar&amp;quot;,&lt;br /&gt;
                &amp;quot;Programar&amp;quot;,&lt;br /&gt;
                &amp;quot;Scuba Diving&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Catalana&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Amiga Pepita&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 25,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Cubana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;167 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Natación&amp;quot;,&lt;br /&gt;
                &amp;quot;Alpinismo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cinéfila&amp;quot;,&lt;br /&gt;
                &amp;quot;Socializar&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Cerro del Estudiante&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;456&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Argentina&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
Exemple 1 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;employees&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple 2 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var JSONObject={&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;John Johnson&amp;quot;,&lt;br /&gt;
  &amp;quot;street&amp;quot;: &amp;quot;Oslo West 555&amp;quot;,&lt;br /&gt;
  &amp;quot;age&amp;quot;: 33,&lt;br /&gt;
  &amp;quot;phone&amp;quot;: &amp;quot;555 1234567&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;jname&amp;quot;).innerHTML=JSONObject.name;&lt;br /&gt;
document.getElementById(&amp;quot;jage&amp;quot;).innerHTML=JSONObject.age;&lt;br /&gt;
document.getElementById(&amp;quot;jstreet&amp;quot;).innerHTML=JSONObject.street;&lt;br /&gt;
document.getElementById(&amp;quot;jphone&amp;quot;).innerHTML=JSONObject.phone;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Validadors de json'''&lt;br /&gt;
&lt;br /&gt;
http://jsonviewer.stack.hu/&lt;br /&gt;
&lt;br /&gt;
http://jsonlint.com/&lt;br /&gt;
&lt;br /&gt;
==La conversió d'un text JSON a un objecte JavaScript==&lt;br /&gt;
&lt;br /&gt;
'''NO RECOMENDADO'''&lt;br /&gt;
&lt;br /&gt;
http://www.etnassoft.com/2011/01/05/javascript-eval-uso-y-alternativas/&lt;br /&gt;
&lt;br /&gt;
Crear una cadena de JavaScript que conté la sintaxi de JSON:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var txt = '{ &amp;quot;employees&amp;quot; : [' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;John&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Doe&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Anna&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Smith&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Peter&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Jones&amp;quot; } ]}';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxi JSON és un subconjunt de la sintaxi de JavaScript, la funció eval () de JavaScript es pot utilitzar per convertir un text JSON en un objecte de JavaScript. &lt;br /&gt;
&lt;br /&gt;
La funció eval () utilitza el compilador de JavaScript que analitzar el text JSON i produeix un objecte de JavaScript. El text ha de ser embolicat amb parèntesi per evitar un error de sintaxi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj = eval (&amp;quot;(&amp;quot; + txt + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
First Name: &amp;lt;span id=&amp;quot;fname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
Last Name: &amp;lt;span id=&amp;quot;lname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;fname&amp;quot;).innerHTML = obj.employees[1].firstName;&lt;br /&gt;
document.getElementById(&amp;quot;lname&amp;quot;).innerHTML = obj.employees[1].lastName; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
És més segur utilitzar un analitzador JSON per a convertir un text JSON en un objecte de JavaScript. Un analitzador JSON reconeixerà només text JSON i no compilar scripts. &lt;br /&gt;
&lt;br /&gt;
En els navegadors que donen suport JSON natiu, analitzadors JSON són també més ràpid. &lt;br /&gt;
&lt;br /&gt;
Suport JSON nadiu està inclòs en tots els principals navegadors i en l'últim estàndard ECMAScript (JavaScript).&lt;br /&gt;
&lt;br /&gt;
== JAVASCRIPT &amp;amp; JSON ==&lt;br /&gt;
&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JAVASCRIPT)===&lt;br /&gt;
*Es pot fer amb la llibreria nativa de JSON per javascript (Javascript)&lt;br /&gt;
*la llibreria tracta una cadena de text i el transforma com a objecte JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myObject = JSON.parse('{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.w3schools.com/js/js_json_parse.asp&lt;br /&gt;
&lt;br /&gt;
=== Donat un objecte JSON converti-lo en Text ===&lt;br /&gt;
&lt;br /&gt;
* Transforma tot el contingut de un objecte Json a string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myJSONText = JSON.stringify(myObject);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Més informació a https://www.w3schools.com/js/js_json_stringify.asp&lt;br /&gt;
&lt;br /&gt;
== PHP &amp;amp; JSON ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = {&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un JSON desde PHP (json_encode)'''&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un objeto en PHP con JSON (json_decode)'''&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery &amp;amp; JSON ==&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JQUERY)===&lt;br /&gt;
* Es pot fer amb la funció Jquery.parse(): rep una cadena JSON ben formatada i retorna l'objecte JavaScript resultant. (JQuery)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = jQuery.parseJSON( '{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }' );&lt;br /&gt;
alert( obj.name === &amp;quot;John&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://api.jquery.com/jQuery.parseJSON/&lt;br /&gt;
&lt;br /&gt;
=== LLegir dades des de un fitxer JSON (JQUERY)===&lt;br /&gt;
Supossem que tenim un fitxer anonenat dades.json i el volem llegir amb Javascript.&lt;br /&gt;
Fitxer dades.json :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;users&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Ray&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Villalobos&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;January&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2012&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Jones&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;April&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 28,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2010&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
S'utilitza la funcion getJSON de jQuery:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jquery&amp;quot;&amp;gt;&lt;br /&gt;
$.getJSON('files/data.json', function(data) {&lt;br /&gt;
        var output=&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
        for (var i=0;i&amp;lt;data.users.length;i++) {&lt;br /&gt;
            output+=&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + data.users[i].firstName + &amp;quot; &amp;quot; + data.users[i].lastName + &amp;quot;--&amp;quot; + data.users[i].joined.month+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        output+=&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
        document.getElementById(&amp;quot;placeholder&amp;quot;).innerHTML=output;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ens mostrará en pantalla&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
   * Ray Villalobos--January&lt;br /&gt;
   * John Jones--April&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enviar un objecte JSON amb $.ajax() (JQUERY) ===&lt;br /&gt;
Exemple 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify({&lt;br /&gt;
            first_name: $(&amp;quot;#namec&amp;quot;).val(),&lt;br /&gt;
            last_name: $(&amp;quot;#surnamec&amp;quot;).val(),&lt;br /&gt;
            email: $(&amp;quot;#emailc&amp;quot;).val(),&lt;br /&gt;
            mobile: $(&amp;quot;#numberc&amp;quot;).val(),&lt;br /&gt;
            password: $(&amp;quot;#passwordc&amp;quot;).val()&lt;br /&gt;
        }),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = {};&lt;br /&gt;
&lt;br /&gt;
obj.first_name = $(&amp;quot;#namec&amp;quot;).val();&lt;br /&gt;
obj.last_name = $(&amp;quot;#surnamec&amp;quot;).val();&lt;br /&gt;
obj.email = $(&amp;quot;#emailc&amp;quot;).val();&lt;br /&gt;
obj.mobile = $(&amp;quot;#numberc&amp;quot;).val();&lt;br /&gt;
obj.password = $(&amp;quot;#passwordc&amp;quot;).val();&lt;br /&gt;
&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify(obj),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple 3:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    var parametros = {&lt;br /&gt;
                &amp;quot;valorCaja1&amp;quot; : valorCaja1,&lt;br /&gt;
                &amp;quot;valorCaja2&amp;quot; : valorCaja2&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        $.ajax({&lt;br /&gt;
                data:  parametros,&lt;br /&gt;
                url:   'ejemplo_ajax_proceso.php',&lt;br /&gt;
                type:  'post',&lt;br /&gt;
                beforeSend: function () {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(&amp;quot;Procesando, espere por favor...&amp;quot;);&lt;br /&gt;
                },&lt;br /&gt;
                success:  function (response) {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(response);&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XML =&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
== Creació de l'Arbre XML ==&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$file = &amp;quot;files/aules.xml&amp;quot;;&lt;br /&gt;
$xmldom = new DOMDocument();&lt;br /&gt;
$xmldom-&amp;gt;load($file);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenir un element de l'arbre ==&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recòrrer tots els elemens ==&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
foreach ($aules as $aula) {&lt;br /&gt;
    $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Afegir un nou element ==&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$auladom = $xmldom-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmldom-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($classroomName));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmldom-&amp;gt;createElement(XARXA_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($network));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmldom-&amp;gt;createElement(MASK_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($mask));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmldom-&amp;gt;createElement(INIT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmldom-&amp;gt;createElement(CURRENT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
$root = $xmldom-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmldom-&amp;gt;save($filename);  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Esborrar un element ==&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//funció que esborra un node i els seus fills&lt;br /&gt;
    function deleteNode($node) {&lt;br /&gt;
        deleteChildren($node);&lt;br /&gt;
        $parent = $node-&amp;gt;parentNode;&lt;br /&gt;
        $oldnode = $parent-&amp;gt;removeChild($node);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//funció que esborra els fills d'un node&lt;br /&gt;
    function deleteChildren($node) {&lt;br /&gt;
        while (isset($node-&amp;gt;firstChild)) {&lt;br /&gt;
            deleteChildren($node-&amp;gt;firstChild);&lt;br /&gt;
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
//funció que cerca al XML un node amb el nom=$classroomname    &lt;br /&gt;
    function delete($classroomName){&lt;br /&gt;
         $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
          foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                deleteNode($aula);&lt;br /&gt;
                $xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Modificar un valor ==&lt;br /&gt;
Per modificar un valor, primer es cerca i després es mira quin dels atributs es vol modificar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function setNewClassroomAttr($classroomName, $attr, $value)&lt;br /&gt;
    {&lt;br /&gt;
        $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
        foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                $aula-&amp;gt;getElementsByTagName($attr)-&amp;gt;item(0)-&amp;gt;nodeValue = strtolower($value);&lt;br /&gt;
                $this-&amp;gt;xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
=Traduïr un XML a JSON =&lt;br /&gt;
En el següent enllaç podem veure que els fitxers XML es poden traduir a sintaxi JSON. Tanmateix, quan els fitxers XML es compliquen, el seu equivalent JSON passa a ser bastant difícil de llegir i interpretar:&lt;br /&gt;
http://www.utilities-online.info/xmltojson/#.WjqMa2fWxMw&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EXERCICIS ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.Crea una aplicació que rep com paràmetre en un input una ciutat i després es realitza una consulta amb fetch que retorni el temps de la ciutat o que digui que no hi ha cap ciutat anomenada així.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Api d'on treurem el temps:&lt;br /&gt;
&lt;br /&gt;
http://neftali.clubdelphi.com/hablando-del-tiempo-openweathermap-12/&lt;br /&gt;
&lt;br /&gt;
*Exemple amb la ciutat Barcelona&lt;br /&gt;
http://api.openweathermap.org/data/2.5/find?&amp;amp;q=Barcelona,es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*Exemple html on mostra les dades obtingudes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
`&amp;lt;br&amp;gt;&amp;lt;h3 style=&amp;quot;display: inline;&amp;quot;&amp;gt;Ciudad: ${ciutat}&amp;lt;/h3&amp;gt; [lat = ${lat}, lon = ${lon} ] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Estado del cielo: &amp;lt;/b&amp;gt;${estado_cielo}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Descripción: &amp;lt;/b&amp;gt;${descripcion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Temperatura: &amp;lt;/b&amp;gt;${temp} K [Máx: ${tempmax}K, Mín: ${tempmin}K]&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;${presion}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Humedad: &amp;lt;/b&amp;gt;${humedad}&amp;lt;br&amp;gt;&lt;br /&gt;
                        &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; `&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
1.b) Es vol retornar el json del temps al client.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_temps]]&lt;br /&gt;
&lt;br /&gt;
2. Tenim un fitxer Json al servidor, volem carregar aquest fitxer i treballar amb la seua informació. &lt;br /&gt;
&lt;br /&gt;
http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Se desea hacer un cuadrado de 100 x 100 px que se vaya desplazando en función de las teclas que se presionen (arriba abajo derecha izquierda)....&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17952</id>
		<title>NF3 - XML i JSON</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17952"/>
				<updated>2024-04-12T16:51:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Obtenir un element del arbre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON =&lt;br /&gt;
JSON (JavaScript Object Notation) és un format d'intercanvi de dades lleuger. És fàcil per als éssers humans a llegir i escriure. És fàcil per a les màquines per analitzar i generar. Es basa en un subconjunt del llenguatge de programació JavaScript, estàndard ECMA-262 3rd Edition -. Desembre 1999 JSON és un format de text que és completament independent del llenguatge però utilitza convencions que són familiars per als programadors de la C-família de llenguatges, incloent C , C + +, C #, Java, JavaScript, Perl, Python, i molts altres. Aquestes propietats fan de JSON un llenguatge ideal-l'intercanvi de dades.&lt;br /&gt;
JSON es basa en dues estructures: &lt;br /&gt;
&lt;br /&gt;
*Una col·lecció de parells nom / valor. En diversos idiomes, això es realitza com un objecte, fitxa, estructura, diccionari, taula hash, llista amb clau, o una matriu associativa. &lt;br /&gt;
*Una llista ordenada de valors. En la majoria dels idiomes, això es realitza en forma de matriu, vector, llista o seqüència. &lt;br /&gt;
Es tracta d'estructures de dades universals. Pràcticament tots els llenguatges de programació moderns els donen suport d'una manera o altra. Té sentit que un format de dades que és intercanviable amb els llenguatges de programació també es basarà en aquestes estructures.&lt;br /&gt;
&lt;br /&gt;
Com que utilitza la sintaxi de JSON amb JavaScript sense necessitat de programari addicional que es necessita per treballar amb JSON en JavaScript. &lt;br /&gt;
&lt;br /&gt;
Exemples de Json&lt;br /&gt;
&lt;br /&gt;
El principi bàsic és amb parells atribut-valor, aquests han d'estar tancats entre claus {,} que és el que defineixen l'inici i la fi de l'objecte.&lt;br /&gt;
&lt;br /&gt;
== Parell Nom/Valor ==&lt;br /&gt;
Generador JSON https://www.json-generator.com/&lt;br /&gt;
&lt;br /&gt;
Les dades en format JSON està escrit en forma de parells nom / valor. &lt;br /&gt;
&lt;br /&gt;
Un parell de nom / valor consisteix en un nom de camp (entre cometes), seguit de dos punts, seguit d'un valor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;firstName&amp;quot; : &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això és fàcil d'entendre, i és igual a la instrucció de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valors Json:&lt;br /&gt;
&lt;br /&gt;
*Un nombre (sencer o punt flotant) &lt;br /&gt;
*Una cadena (entre cometes) &lt;br /&gt;
*Booleà (cert o fals) &lt;br /&gt;
*Un conjunt (entre claudàtors) &lt;br /&gt;
*Un objecte (entre claus) &lt;br /&gt;
*nul&lt;br /&gt;
&lt;br /&gt;
==JSON Objects==&lt;br /&gt;
Objectes JSON s'escriuen entre claus, &lt;br /&gt;
&lt;br /&gt;
Els objectes poden contenir diversos parells de noms / valors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
  &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això també és fàcil d'entendre, i és igual a les sentències de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;;&lt;br /&gt;
lastName = &amp;quot;Doe&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JSON Array==&lt;br /&gt;
Arrays JSON s'escriuen entre claudàtors. &lt;br /&gt;
&lt;br /&gt;
Una matriu pot contenir diversos objectes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;profes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En l'exemple anterior, l'objecte &amp;quot;empleats&amp;quot; és una matriu que conté tres objectes. Cada objecte és un registre d'una persona (amb un nom i un cognom).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var profes=[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
profes[0].firstName + &amp;quot; &amp;quot; + profes[0].lastName;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-------------------&lt;br /&gt;
'''EXEMPLES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
//Ejemplo de JSON para un objeto tipo Persona&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:30,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Española&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;182 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Json amb booleans, nombre, cadenes i un objecte direcció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Fulano Probencio&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:27,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Chileno&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;172 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75,&lt;br /&gt;
&amp;quot;pasatiempos&amp;quot;:[&amp;quot;Polo&amp;quot;,&amp;quot;Cricket&amp;quot;,&amp;quot;Ski&amp;quot;,&amp;quot;Drafting&amp;quot;,&amp;quot;Gaming&amp;quot;],&lt;br /&gt;
&amp;quot;soltero&amp;quot;:true,&lt;br /&gt;
&amp;quot;direccion&amp;quot;:{&lt;br /&gt;
    &amp;quot;calle&amp;quot;:&amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
    &amp;quot;numero&amp;quot;:&amp;quot;123&amp;quot;,&lt;br /&gt;
    &amp;quot;pais&amp;quot;:&amp;quot;México&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un array de objectes persona.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;personas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 30,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Española&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;182 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 75,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Polo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cricket&amp;quot;,&lt;br /&gt;
                &amp;quot;Ski&amp;quot;,&lt;br /&gt;
                &amp;quot;Drafting&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;España&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Ramón&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 22,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Catalana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;178 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 72,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Pintar&amp;quot;,&lt;br /&gt;
                &amp;quot;Programar&amp;quot;,&lt;br /&gt;
                &amp;quot;Scuba Diving&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Catalana&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Amiga Pepita&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 25,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Cubana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;167 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Natación&amp;quot;,&lt;br /&gt;
                &amp;quot;Alpinismo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cinéfila&amp;quot;,&lt;br /&gt;
                &amp;quot;Socializar&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Cerro del Estudiante&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;456&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Argentina&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
Exemple 1 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;employees&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple 2 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var JSONObject={&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;John Johnson&amp;quot;,&lt;br /&gt;
  &amp;quot;street&amp;quot;: &amp;quot;Oslo West 555&amp;quot;,&lt;br /&gt;
  &amp;quot;age&amp;quot;: 33,&lt;br /&gt;
  &amp;quot;phone&amp;quot;: &amp;quot;555 1234567&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;jname&amp;quot;).innerHTML=JSONObject.name;&lt;br /&gt;
document.getElementById(&amp;quot;jage&amp;quot;).innerHTML=JSONObject.age;&lt;br /&gt;
document.getElementById(&amp;quot;jstreet&amp;quot;).innerHTML=JSONObject.street;&lt;br /&gt;
document.getElementById(&amp;quot;jphone&amp;quot;).innerHTML=JSONObject.phone;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Validadors de json'''&lt;br /&gt;
&lt;br /&gt;
http://jsonviewer.stack.hu/&lt;br /&gt;
&lt;br /&gt;
http://jsonlint.com/&lt;br /&gt;
&lt;br /&gt;
==La conversió d'un text JSON a un objecte JavaScript==&lt;br /&gt;
&lt;br /&gt;
'''NO RECOMENDADO'''&lt;br /&gt;
&lt;br /&gt;
http://www.etnassoft.com/2011/01/05/javascript-eval-uso-y-alternativas/&lt;br /&gt;
&lt;br /&gt;
Crear una cadena de JavaScript que conté la sintaxi de JSON:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var txt = '{ &amp;quot;employees&amp;quot; : [' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;John&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Doe&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Anna&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Smith&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Peter&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Jones&amp;quot; } ]}';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxi JSON és un subconjunt de la sintaxi de JavaScript, la funció eval () de JavaScript es pot utilitzar per convertir un text JSON en un objecte de JavaScript. &lt;br /&gt;
&lt;br /&gt;
La funció eval () utilitza el compilador de JavaScript que analitzar el text JSON i produeix un objecte de JavaScript. El text ha de ser embolicat amb parèntesi per evitar un error de sintaxi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj = eval (&amp;quot;(&amp;quot; + txt + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
First Name: &amp;lt;span id=&amp;quot;fname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
Last Name: &amp;lt;span id=&amp;quot;lname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;fname&amp;quot;).innerHTML = obj.employees[1].firstName;&lt;br /&gt;
document.getElementById(&amp;quot;lname&amp;quot;).innerHTML = obj.employees[1].lastName; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
És més segur utilitzar un analitzador JSON per a convertir un text JSON en un objecte de JavaScript. Un analitzador JSON reconeixerà només text JSON i no compilar scripts. &lt;br /&gt;
&lt;br /&gt;
En els navegadors que donen suport JSON natiu, analitzadors JSON són també més ràpid. &lt;br /&gt;
&lt;br /&gt;
Suport JSON nadiu està inclòs en tots els principals navegadors i en l'últim estàndard ECMAScript (JavaScript).&lt;br /&gt;
&lt;br /&gt;
== JAVASCRIPT &amp;amp; JSON ==&lt;br /&gt;
&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JAVASCRIPT)===&lt;br /&gt;
*Es pot fer amb la llibreria nativa de JSON per javascript (Javascript)&lt;br /&gt;
*la llibreria tracta una cadena de text i el transforma com a objecte JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myObject = JSON.parse('{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.w3schools.com/js/js_json_parse.asp&lt;br /&gt;
&lt;br /&gt;
=== Donat un objecte JSON converti-lo en Text ===&lt;br /&gt;
&lt;br /&gt;
* Transforma tot el contingut de un objecte Json a string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myJSONText = JSON.stringify(myObject);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Més informació a https://www.w3schools.com/js/js_json_stringify.asp&lt;br /&gt;
&lt;br /&gt;
== PHP &amp;amp; JSON ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = {&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un JSON desde PHP (json_encode)'''&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un objeto en PHP con JSON (json_decode)'''&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery &amp;amp; JSON ==&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JQUERY)===&lt;br /&gt;
* Es pot fer amb la funció Jquery.parse(): rep una cadena JSON ben formatada i retorna l'objecte JavaScript resultant. (JQuery)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = jQuery.parseJSON( '{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }' );&lt;br /&gt;
alert( obj.name === &amp;quot;John&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://api.jquery.com/jQuery.parseJSON/&lt;br /&gt;
&lt;br /&gt;
=== LLegir dades des de un fitxer JSON (JQUERY)===&lt;br /&gt;
Supossem que tenim un fitxer anonenat dades.json i el volem llegir amb Javascript.&lt;br /&gt;
Fitxer dades.json :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;users&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Ray&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Villalobos&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;January&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2012&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Jones&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;April&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 28,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2010&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
S'utilitza la funcion getJSON de jQuery:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jquery&amp;quot;&amp;gt;&lt;br /&gt;
$.getJSON('files/data.json', function(data) {&lt;br /&gt;
        var output=&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
        for (var i=0;i&amp;lt;data.users.length;i++) {&lt;br /&gt;
            output+=&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + data.users[i].firstName + &amp;quot; &amp;quot; + data.users[i].lastName + &amp;quot;--&amp;quot; + data.users[i].joined.month+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        output+=&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
        document.getElementById(&amp;quot;placeholder&amp;quot;).innerHTML=output;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ens mostrará en pantalla&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
   * Ray Villalobos--January&lt;br /&gt;
   * John Jones--April&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enviar un objecte JSON amb $.ajax() (JQUERY) ===&lt;br /&gt;
Exemple 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify({&lt;br /&gt;
            first_name: $(&amp;quot;#namec&amp;quot;).val(),&lt;br /&gt;
            last_name: $(&amp;quot;#surnamec&amp;quot;).val(),&lt;br /&gt;
            email: $(&amp;quot;#emailc&amp;quot;).val(),&lt;br /&gt;
            mobile: $(&amp;quot;#numberc&amp;quot;).val(),&lt;br /&gt;
            password: $(&amp;quot;#passwordc&amp;quot;).val()&lt;br /&gt;
        }),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = {};&lt;br /&gt;
&lt;br /&gt;
obj.first_name = $(&amp;quot;#namec&amp;quot;).val();&lt;br /&gt;
obj.last_name = $(&amp;quot;#surnamec&amp;quot;).val();&lt;br /&gt;
obj.email = $(&amp;quot;#emailc&amp;quot;).val();&lt;br /&gt;
obj.mobile = $(&amp;quot;#numberc&amp;quot;).val();&lt;br /&gt;
obj.password = $(&amp;quot;#passwordc&amp;quot;).val();&lt;br /&gt;
&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify(obj),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple 3:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    var parametros = {&lt;br /&gt;
                &amp;quot;valorCaja1&amp;quot; : valorCaja1,&lt;br /&gt;
                &amp;quot;valorCaja2&amp;quot; : valorCaja2&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        $.ajax({&lt;br /&gt;
                data:  parametros,&lt;br /&gt;
                url:   'ejemplo_ajax_proceso.php',&lt;br /&gt;
                type:  'post',&lt;br /&gt;
                beforeSend: function () {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(&amp;quot;Procesando, espere por favor...&amp;quot;);&lt;br /&gt;
                },&lt;br /&gt;
                success:  function (response) {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(response);&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XML =&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
== Creació de l'Arbre XML ==&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$file = &amp;quot;files/aules.xml&amp;quot;;&lt;br /&gt;
$xmldom = new DOMDocument();&lt;br /&gt;
$xmldom-&amp;gt;load($file);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenir un element de l'arbre ==&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recòrrer tots els elemens ==&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
foreach ($aules as $aula) {&lt;br /&gt;
    $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Afegir un nou element ==&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$auladom = $xmldom-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmldom-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($classroomName));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmldom-&amp;gt;createElement(XARXA_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($network));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmldom-&amp;gt;createElement(MASK_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($mask));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmldom-&amp;gt;createElement(INIT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmldom-&amp;gt;createElement(CURRENT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
$root = $xmldom-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmldom-&amp;gt;save($filename);  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Esborrar un element ==&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//funció que esborra un node i els seus fills&lt;br /&gt;
    function deleteNode($node) {&lt;br /&gt;
        deleteChildren($node);&lt;br /&gt;
        $parent = $node-&amp;gt;parentNode;&lt;br /&gt;
        $oldnode = $parent-&amp;gt;removeChild($node);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//funció que esborra els fills d'un node&lt;br /&gt;
    function deleteChildren($node) {&lt;br /&gt;
        while (isset($node-&amp;gt;firstChild)) {&lt;br /&gt;
            deleteChildren($node-&amp;gt;firstChild);&lt;br /&gt;
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
//funció que cerca al XML un node amb el nom=$classroomname    &lt;br /&gt;
    function delete($classroomName){&lt;br /&gt;
         $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
          foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                deleteNode($aula);&lt;br /&gt;
                $xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Modificar un valor ==&lt;br /&gt;
Per modificar un valor, primer es cerca i després es mira quin dels atributs es vol modificar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function setNewClassroomAttr($classroomName, $attr, $value)&lt;br /&gt;
    {&lt;br /&gt;
        $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
        foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                $aula-&amp;gt;getElementsByTagName($attr)-&amp;gt;item(0)-&amp;gt;nodeValue = strtolower($value);&lt;br /&gt;
                $this-&amp;gt;xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
=Traduïr un XML a JSON =&lt;br /&gt;
En el següent enllaç podem veure que els fitxers XML es poden traduir a sintaxi JSON. Tanmateix, quan els fitxers XML es compliquen, el seu equivalent JSON passa a ser bastant difícil de llegir i interpretar:&lt;br /&gt;
http://www.utilities-online.info/xmltojson/#.WjqMa2fWxMw&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EXERCICIS ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
1.a)Es tracta de crear una aplicació que rep com paràmetre en un input una ciutat i després es realitza una consulta php a l'adreça &amp;quot;http://api.openweathermap.org/data/2.5/weather?q=&amp;quot; que haurà d'analitzar la informació dins del php i retornar html  &lt;br /&gt;
&lt;br /&gt;
(exemple echo &amp;quot;&amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;&amp;quot;. $presion.&amp;quot;&amp;lt;br&amp;gt;&amp;quot; ;)&lt;br /&gt;
&lt;br /&gt;
*Exemple, d'utilització &lt;br /&gt;
&lt;br /&gt;
http://neftali.clubdelphi.com/hablando-del-tiempo-openweathermap-12/&lt;br /&gt;
&lt;br /&gt;
http://api.openweathermap.org/data/2.5/find?&amp;amp;q=Barcelona,es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19&amp;quot;&lt;br /&gt;
*Para cargar, una página dentro del php &amp;quot;$html = file_get_contents(url)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
1.b) Es vol retornar el json del temps al client.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_temps]]&lt;br /&gt;
&lt;br /&gt;
2. Tenim un fitxer Json al servidor, volem carregar aquest fitxer i treballar amb la seua informació. &lt;br /&gt;
&lt;br /&gt;
http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Se desea hacer un cuadrado de 100 x 100 px que se vaya desplazando en función de las teclas que se presionen (arriba abajo derecha izquierda)....&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17951</id>
		<title>NF3 - XML i JSON</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF3_-_XML_i_JSON&amp;diff=17951"/>
				<updated>2024-04-12T16:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Creació del Arbre XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON =&lt;br /&gt;
JSON (JavaScript Object Notation) és un format d'intercanvi de dades lleuger. És fàcil per als éssers humans a llegir i escriure. És fàcil per a les màquines per analitzar i generar. Es basa en un subconjunt del llenguatge de programació JavaScript, estàndard ECMA-262 3rd Edition -. Desembre 1999 JSON és un format de text que és completament independent del llenguatge però utilitza convencions que són familiars per als programadors de la C-família de llenguatges, incloent C , C + +, C #, Java, JavaScript, Perl, Python, i molts altres. Aquestes propietats fan de JSON un llenguatge ideal-l'intercanvi de dades.&lt;br /&gt;
JSON es basa en dues estructures: &lt;br /&gt;
&lt;br /&gt;
*Una col·lecció de parells nom / valor. En diversos idiomes, això es realitza com un objecte, fitxa, estructura, diccionari, taula hash, llista amb clau, o una matriu associativa. &lt;br /&gt;
*Una llista ordenada de valors. En la majoria dels idiomes, això es realitza en forma de matriu, vector, llista o seqüència. &lt;br /&gt;
Es tracta d'estructures de dades universals. Pràcticament tots els llenguatges de programació moderns els donen suport d'una manera o altra. Té sentit que un format de dades que és intercanviable amb els llenguatges de programació també es basarà en aquestes estructures.&lt;br /&gt;
&lt;br /&gt;
Com que utilitza la sintaxi de JSON amb JavaScript sense necessitat de programari addicional que es necessita per treballar amb JSON en JavaScript. &lt;br /&gt;
&lt;br /&gt;
Exemples de Json&lt;br /&gt;
&lt;br /&gt;
El principi bàsic és amb parells atribut-valor, aquests han d'estar tancats entre claus {,} que és el que defineixen l'inici i la fi de l'objecte.&lt;br /&gt;
&lt;br /&gt;
== Parell Nom/Valor ==&lt;br /&gt;
Generador JSON https://www.json-generator.com/&lt;br /&gt;
&lt;br /&gt;
Les dades en format JSON està escrit en forma de parells nom / valor. &lt;br /&gt;
&lt;br /&gt;
Un parell de nom / valor consisteix en un nom de camp (entre cometes), seguit de dos punts, seguit d'un valor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;firstName&amp;quot; : &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això és fàcil d'entendre, i és igual a la instrucció de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valors Json:&lt;br /&gt;
&lt;br /&gt;
*Un nombre (sencer o punt flotant) &lt;br /&gt;
*Una cadena (entre cometes) &lt;br /&gt;
*Booleà (cert o fals) &lt;br /&gt;
*Un conjunt (entre claudàtors) &lt;br /&gt;
*Un objecte (entre claus) &lt;br /&gt;
*nul&lt;br /&gt;
&lt;br /&gt;
==JSON Objects==&lt;br /&gt;
Objectes JSON s'escriuen entre claus, &lt;br /&gt;
&lt;br /&gt;
Els objectes poden contenir diversos parells de noms / valors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
  &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Això també és fàcil d'entendre, i és igual a les sentències de JavaScript:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
firstName = &amp;quot;John&amp;quot;;&lt;br /&gt;
lastName = &amp;quot;Doe&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JSON Array==&lt;br /&gt;
Arrays JSON s'escriuen entre claudàtors. &lt;br /&gt;
&lt;br /&gt;
Una matriu pot contenir diversos objectes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;profes&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En l'exemple anterior, l'objecte &amp;quot;empleats&amp;quot; és una matriu que conté tres objectes. Cada objecte és un registre d'una persona (amb un nom i un cognom).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var profes=[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
    &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
profes[0].firstName + &amp;quot; &amp;quot; + profes[0].lastName;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-------------------&lt;br /&gt;
'''EXEMPLES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
//Ejemplo de JSON para un objeto tipo Persona&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:30,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Española&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;182 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Json amb booleans, nombre, cadenes i un objecte direcció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;nombre&amp;quot;:&amp;quot;Fulano Probencio&amp;quot;,&lt;br /&gt;
&amp;quot;edad&amp;quot;:27,&lt;br /&gt;
&amp;quot;nacionalidad&amp;quot;:&amp;quot;Chileno&amp;quot;,&lt;br /&gt;
&amp;quot;altura&amp;quot;:&amp;quot;172 cm&amp;quot;,&lt;br /&gt;
&amp;quot;peso&amp;quot;:75,&lt;br /&gt;
&amp;quot;pasatiempos&amp;quot;:[&amp;quot;Polo&amp;quot;,&amp;quot;Cricket&amp;quot;,&amp;quot;Ski&amp;quot;,&amp;quot;Drafting&amp;quot;,&amp;quot;Gaming&amp;quot;],&lt;br /&gt;
&amp;quot;soltero&amp;quot;:true,&lt;br /&gt;
&amp;quot;direccion&amp;quot;:{&lt;br /&gt;
    &amp;quot;calle&amp;quot;:&amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
    &amp;quot;numero&amp;quot;:&amp;quot;123&amp;quot;,&lt;br /&gt;
    &amp;quot;pais&amp;quot;:&amp;quot;México&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un array de objectes persona.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;personas&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 30,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Española&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;182 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 75,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Polo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cricket&amp;quot;,&lt;br /&gt;
                &amp;quot;Ski&amp;quot;,&lt;br /&gt;
                &amp;quot;Drafting&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;España&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Ramón&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 22,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Catalana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;178 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 72,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Pintar&amp;quot;,&lt;br /&gt;
                &amp;quot;Programar&amp;quot;,&lt;br /&gt;
                &amp;quot;Scuba Diving&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Ave. Siempre Viva&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;123&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Catalana&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;nombre&amp;quot;: &amp;quot;Amiga Pepita&amp;quot;,&lt;br /&gt;
            &amp;quot;edad&amp;quot;: 25,&lt;br /&gt;
            &amp;quot;nacionalidad&amp;quot;: &amp;quot;Cubana&amp;quot;,&lt;br /&gt;
            &amp;quot;altura&amp;quot;: &amp;quot;167 cm&amp;quot;,&lt;br /&gt;
            &amp;quot;peso&amp;quot;: 55,&lt;br /&gt;
            &amp;quot;pasatiempos&amp;quot;: [&lt;br /&gt;
                &amp;quot;Natación&amp;quot;,&lt;br /&gt;
                &amp;quot;Alpinismo&amp;quot;,&lt;br /&gt;
                &amp;quot;Cinéfila&amp;quot;,&lt;br /&gt;
                &amp;quot;Socializar&amp;quot;,&lt;br /&gt;
                &amp;quot;Gaming&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;soltero&amp;quot;: true,&lt;br /&gt;
            &amp;quot;direccion&amp;quot;: {&lt;br /&gt;
                &amp;quot;calle&amp;quot;: &amp;quot;Cerro del Estudiante&amp;quot;,&lt;br /&gt;
                &amp;quot;numero&amp;quot;: &amp;quot;456&amp;quot;,&lt;br /&gt;
                &amp;quot;pais&amp;quot;: &amp;quot;Argentina&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-----------------------------------------------------------&lt;br /&gt;
Exemple 1 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;employees&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Julio&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Noguera&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Albert&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Canela&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Alex&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Salinas&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple 2 :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
var JSONObject={&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;John Johnson&amp;quot;,&lt;br /&gt;
  &amp;quot;street&amp;quot;: &amp;quot;Oslo West 555&amp;quot;,&lt;br /&gt;
  &amp;quot;age&amp;quot;: 33,&lt;br /&gt;
  &amp;quot;phone&amp;quot;: &amp;quot;555 1234567&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;jname&amp;quot;).innerHTML=JSONObject.name;&lt;br /&gt;
document.getElementById(&amp;quot;jage&amp;quot;).innerHTML=JSONObject.age;&lt;br /&gt;
document.getElementById(&amp;quot;jstreet&amp;quot;).innerHTML=JSONObject.street;&lt;br /&gt;
document.getElementById(&amp;quot;jphone&amp;quot;).innerHTML=JSONObject.phone;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Validadors de json'''&lt;br /&gt;
&lt;br /&gt;
http://jsonviewer.stack.hu/&lt;br /&gt;
&lt;br /&gt;
http://jsonlint.com/&lt;br /&gt;
&lt;br /&gt;
==La conversió d'un text JSON a un objecte JavaScript==&lt;br /&gt;
&lt;br /&gt;
'''NO RECOMENDADO'''&lt;br /&gt;
&lt;br /&gt;
http://www.etnassoft.com/2011/01/05/javascript-eval-uso-y-alternativas/&lt;br /&gt;
&lt;br /&gt;
Crear una cadena de JavaScript que conté la sintaxi de JSON:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var txt = '{ &amp;quot;employees&amp;quot; : [' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;John&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Doe&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Anna&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Smith&amp;quot; },' +&lt;br /&gt;
'{ &amp;quot;firstName&amp;quot;:&amp;quot;Peter&amp;quot; , &amp;quot;lastName&amp;quot;:&amp;quot;Jones&amp;quot; } ]}';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxi JSON és un subconjunt de la sintaxi de JavaScript, la funció eval () de JavaScript es pot utilitzar per convertir un text JSON en un objecte de JavaScript. &lt;br /&gt;
&lt;br /&gt;
La funció eval () utilitza el compilador de JavaScript que analitzar el text JSON i produeix un objecte de JavaScript. El text ha de ser embolicat amb parèntesi per evitar un error de sintaxi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var obj = eval (&amp;quot;(&amp;quot; + txt + &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
First Name: &amp;lt;span id=&amp;quot;fname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
Last Name: &amp;lt;span id=&amp;quot;lname&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;fname&amp;quot;).innerHTML = obj.employees[1].firstName;&lt;br /&gt;
document.getElementById(&amp;quot;lname&amp;quot;).innerHTML = obj.employees[1].lastName; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
És més segur utilitzar un analitzador JSON per a convertir un text JSON en un objecte de JavaScript. Un analitzador JSON reconeixerà només text JSON i no compilar scripts. &lt;br /&gt;
&lt;br /&gt;
En els navegadors que donen suport JSON natiu, analitzadors JSON són també més ràpid. &lt;br /&gt;
&lt;br /&gt;
Suport JSON nadiu està inclòs en tots els principals navegadors i en l'últim estàndard ECMAScript (JavaScript).&lt;br /&gt;
&lt;br /&gt;
== JAVASCRIPT &amp;amp; JSON ==&lt;br /&gt;
&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JAVASCRIPT)===&lt;br /&gt;
*Es pot fer amb la llibreria nativa de JSON per javascript (Javascript)&lt;br /&gt;
*la llibreria tracta una cadena de text i el transforma com a objecte JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myObject = JSON.parse('{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://www.w3schools.com/js/js_json_parse.asp&lt;br /&gt;
&lt;br /&gt;
=== Donat un objecte JSON converti-lo en Text ===&lt;br /&gt;
&lt;br /&gt;
* Transforma tot el contingut de un objecte Json a string&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var myJSONText = JSON.stringify(myObject);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Més informació a https://www.w3schools.com/js/js_json_stringify.asp&lt;br /&gt;
&lt;br /&gt;
== PHP &amp;amp; JSON ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = {&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un JSON desde PHP (json_encode)'''&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Crear un objeto en PHP con JSON (json_decode)'''&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery &amp;amp; JSON ==&lt;br /&gt;
=== Analitzar text JSON i convertir-lo en un objecte (JQUERY)===&lt;br /&gt;
* Es pot fer amb la funció Jquery.parse(): rep una cadena JSON ben formatada i retorna l'objecte JavaScript resultant. (JQuery)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = jQuery.parseJSON( '{ &amp;quot;name&amp;quot;: &amp;quot;John&amp;quot; }' );&lt;br /&gt;
alert( obj.name === &amp;quot;John&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
https://api.jquery.com/jQuery.parseJSON/&lt;br /&gt;
&lt;br /&gt;
=== LLegir dades des de un fitxer JSON (JQUERY)===&lt;br /&gt;
Supossem que tenim un fitxer anonenat dades.json i el volem llegir amb Javascript.&lt;br /&gt;
Fitxer dades.json :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;users&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;Ray&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Villalobos&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;January&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 12,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2012&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;,&lt;br /&gt;
      &amp;quot;lastName&amp;quot;: &amp;quot;Jones&amp;quot;,&lt;br /&gt;
      &amp;quot;joined&amp;quot;: {&lt;br /&gt;
        &amp;quot;month&amp;quot;: &amp;quot;April&amp;quot;,&lt;br /&gt;
        &amp;quot;day&amp;quot;: 28,&lt;br /&gt;
        &amp;quot;year&amp;quot;: 2010&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
S'utilitza la funcion getJSON de jQuery:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jquery&amp;quot;&amp;gt;&lt;br /&gt;
$.getJSON('files/data.json', function(data) {&lt;br /&gt;
        var output=&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
        for (var i=0;i&amp;lt;data.users.length;i++) {&lt;br /&gt;
            output+=&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + data.users[i].firstName + &amp;quot; &amp;quot; + data.users[i].lastName + &amp;quot;--&amp;quot; + data.users[i].joined.month+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        output+=&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
        document.getElementById(&amp;quot;placeholder&amp;quot;).innerHTML=output;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ens mostrará en pantalla&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
   * Ray Villalobos--January&lt;br /&gt;
   * John Jones--April&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enviar un objecte JSON amb $.ajax() (JQUERY) ===&lt;br /&gt;
Exemple 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify({&lt;br /&gt;
            first_name: $(&amp;quot;#namec&amp;quot;).val(),&lt;br /&gt;
            last_name: $(&amp;quot;#surnamec&amp;quot;).val(),&lt;br /&gt;
            email: $(&amp;quot;#emailc&amp;quot;).val(),&lt;br /&gt;
            mobile: $(&amp;quot;#numberc&amp;quot;).val(),&lt;br /&gt;
            password: $(&amp;quot;#passwordc&amp;quot;).val()&lt;br /&gt;
        }),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var obj = {};&lt;br /&gt;
&lt;br /&gt;
obj.first_name = $(&amp;quot;#namec&amp;quot;).val();&lt;br /&gt;
obj.last_name = $(&amp;quot;#surnamec&amp;quot;).val();&lt;br /&gt;
obj.email = $(&amp;quot;#emailc&amp;quot;).val();&lt;br /&gt;
obj.mobile = $(&amp;quot;#numberc&amp;quot;).val();&lt;br /&gt;
obj.password = $(&amp;quot;#passwordc&amp;quot;).val();&lt;br /&gt;
&lt;br /&gt;
$.ajax({&lt;br /&gt;
        type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
        url: hb_base_url + &amp;quot;consumer&amp;quot;,&lt;br /&gt;
        contentType: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
        data: JSON.stringify(obj),&lt;br /&gt;
        success: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        },&lt;br /&gt;
        error: function(response) {&lt;br /&gt;
            console.log(response);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple 3:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    var parametros = {&lt;br /&gt;
                &amp;quot;valorCaja1&amp;quot; : valorCaja1,&lt;br /&gt;
                &amp;quot;valorCaja2&amp;quot; : valorCaja2&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        $.ajax({&lt;br /&gt;
                data:  parametros,&lt;br /&gt;
                url:   'ejemplo_ajax_proceso.php',&lt;br /&gt;
                type:  'post',&lt;br /&gt;
                beforeSend: function () {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(&amp;quot;Procesando, espere por favor...&amp;quot;);&lt;br /&gt;
                },&lt;br /&gt;
                success:  function (response) {&lt;br /&gt;
                        $(&amp;quot;#resultado&amp;quot;).html(response);&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= XML =&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
== Creació de l'Arbre XML ==&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$file = &amp;quot;files/aules.xml&amp;quot;;&lt;br /&gt;
$xmldom = new DOMDocument();&lt;br /&gt;
$xmldom-&amp;gt;load($file);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtenir un element del arbre ==&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recòrrer tots els elemens ==&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
foreach ($aules as $aula) {&lt;br /&gt;
    $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
    $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Afegir un nou element ==&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$auladom = $xmldom-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmldom-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($classroomName));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmldom-&amp;gt;createElement(XARXA_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($network));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmldom-&amp;gt;createElement(MASK_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($mask));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmldom-&amp;gt;createElement(INIT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmldom-&amp;gt;createElement(CURRENT_AULA_XML);&lt;br /&gt;
$domnode = $xmldom-&amp;gt;createTextNode(strtolower($initialstatus));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
$root = $xmldom-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmldom-&amp;gt;save($filename);  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Esborrar un element ==&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//funció que esborra un node i els seus fills&lt;br /&gt;
    function deleteNode($node) {&lt;br /&gt;
        deleteChildren($node);&lt;br /&gt;
        $parent = $node-&amp;gt;parentNode;&lt;br /&gt;
        $oldnode = $parent-&amp;gt;removeChild($node);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//funció que esborra els fills d'un node&lt;br /&gt;
    function deleteChildren($node) {&lt;br /&gt;
        while (isset($node-&amp;gt;firstChild)) {&lt;br /&gt;
            deleteChildren($node-&amp;gt;firstChild);&lt;br /&gt;
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
//funció que cerca al XML un node amb el nom=$classroomname    &lt;br /&gt;
    function delete($classroomName){&lt;br /&gt;
         $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
          foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                deleteNode($aula);&lt;br /&gt;
                $xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
== Modificar un valor ==&lt;br /&gt;
Per modificar un valor, primer es cerca i després es mira quin dels atributs es vol modificar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function setNewClassroomAttr($classroomName, $attr, $value)&lt;br /&gt;
    {&lt;br /&gt;
        $aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
        foreach ($aules as $aula) {&lt;br /&gt;
            $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
            if (strcmp(strtolower($name), strtolower($classroomName)) == 0){&lt;br /&gt;
                $aula-&amp;gt;getElementsByTagName($attr)-&amp;gt;item(0)-&amp;gt;nodeValue = strtolower($value);&lt;br /&gt;
                $this-&amp;gt;xmldom-&amp;gt;save($this-&amp;gt;filename);   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
=Traduïr un XML a JSON =&lt;br /&gt;
En el següent enllaç podem veure que els fitxers XML es poden traduir a sintaxi JSON. Tanmateix, quan els fitxers XML es compliquen, el seu equivalent JSON passa a ser bastant difícil de llegir i interpretar:&lt;br /&gt;
http://www.utilities-online.info/xmltojson/#.WjqMa2fWxMw&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== EXERCICIS ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
1.a)Es tracta de crear una aplicació que rep com paràmetre en un input una ciutat i després es realitza una consulta php a l'adreça &amp;quot;http://api.openweathermap.org/data/2.5/weather?q=&amp;quot; que haurà d'analitzar la informació dins del php i retornar html  &lt;br /&gt;
&lt;br /&gt;
(exemple echo &amp;quot;&amp;lt;b&amp;gt;Presión: &amp;lt;/b&amp;gt;&amp;quot;. $presion.&amp;quot;&amp;lt;br&amp;gt;&amp;quot; ;)&lt;br /&gt;
&lt;br /&gt;
*Exemple, d'utilització &lt;br /&gt;
&lt;br /&gt;
http://neftali.clubdelphi.com/hablando-del-tiempo-openweathermap-12/&lt;br /&gt;
&lt;br /&gt;
http://api.openweathermap.org/data/2.5/find?&amp;amp;q=Barcelona,es&amp;amp;lang=es&amp;amp;units=metric&amp;amp;APPID=278857e8dee51f914026df21d0d40c19&amp;quot;&lt;br /&gt;
*Para cargar, una página dentro del php &amp;quot;$html = file_get_contents(url)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
1.b) Es vol retornar el json del temps al client.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_temps]]&lt;br /&gt;
&lt;br /&gt;
2. Tenim un fitxer Json al servidor, volem carregar aquest fitxer i treballar amb la seua informació. &lt;br /&gt;
&lt;br /&gt;
http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Se desea hacer un cuadrado de 100 x 100 px que se vaya desplazando en función de las teclas que se presionen (arriba abajo derecha izquierda)....&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17950</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17950"/>
				<updated>2024-04-12T16:49:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici espera]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici2-ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
:[[solució exercici3-ajax]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
:[[solució exercici6-ajax]]&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17949</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17949"/>
				<updated>2024-04-12T16:32:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fitxer html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 4 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 4 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull una ciutat:&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;select name=&amp;quot;ciutat&amp;quot; id=&amp;quot;ciutat&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;barcelona&amp;quot;&amp;gt;Barcelona&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;lacoruna&amp;quot;&amp;gt;La Coruña&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;madrid&amp;quot;&amp;gt;Madrid&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;sevilla&amp;quot;&amp;gt;Sevilla&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull un barri:&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;select name=&amp;quot;barri&amp;quot; id=&amp;quot;barri&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var ciutat = document.getElementById(&amp;quot;ciutat&amp;quot;);&lt;br /&gt;
        var barri = document.getElementById(&amp;quot;barri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
        ciutat.onchange = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;exercici4.php?q=&amp;quot; + ciutat.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            barri.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                var arr_barris = (xhr.responseText).split(&amp;quot;,&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                arr_barris.forEach((_barri) =&amp;gt; {&lt;br /&gt;
                    var nouElement = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
                    var nodeText = document.createTextNode(_barri);&lt;br /&gt;
                    nouElement.appendChild(nodeText);&lt;br /&gt;
                    barri.appendChild(nouElement);&lt;br /&gt;
                })&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//hacer en firefox&lt;br /&gt;
&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici6-ajax&amp;diff=17943</id>
		<title>Solució exercici6-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici6-ajax&amp;diff=17943"/>
				<updated>2024-04-09T14:41:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//fitxer html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 6 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 6 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;input&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;Suggeriments:&lt;br /&gt;
    &amp;lt;div id=&amp;quot;contingut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
        var contingut = document.getElementById(&amp;quot;contingut&amp;quot;);&lt;br /&gt;
        var input = document.getElementById(&amp;quot;input&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        input.oninput = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;ex6.php?q=&amp;quot; + input.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                contingut.innerHTML = xhr.responseText;&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//fitxer php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;, &amp;quot;Brittany&amp;quot;, &amp;quot;Cinderella&amp;quot;, &amp;quot;Diana&amp;quot;, &amp;quot;Eva&amp;quot;, &amp;quot;Fiona&amp;quot;, &amp;quot;Gunda&amp;quot;, &amp;quot;Hege&amp;quot;, &amp;quot;Inga&amp;quot;, &amp;quot;Johanna&amp;quot;, &amp;quot;Kitty&amp;quot;, &amp;quot;Linda&amp;quot;, &amp;quot;Nina&amp;quot;, &amp;quot;Ophelia&amp;quot;, &amp;quot;Petunia&amp;quot;, &amp;quot;Amanda&amp;quot;, &amp;quot;Raquel&amp;quot;, &amp;quot;Cindy&amp;quot;, &amp;quot;Doris&amp;quot;, &amp;quot;Eve&amp;quot;, &amp;quot;Evita&amp;quot;, &amp;quot;Sunniva&amp;quot;, &amp;quot;Tove&amp;quot;, &amp;quot;Unni&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;Liza&amp;quot;, &amp;quot;Elizabeth&amp;quot;, &amp;quot;Ellen&amp;quot;, &amp;quot;Wenche&amp;quot;, &amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
    $q = strtolower($q);&lt;br /&gt;
    $len = strlen($q);&lt;br /&gt;
    foreach ($a as $name) {&lt;br /&gt;
        if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
            if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
                $hint = $name;&lt;br /&gt;
            } else {&lt;br /&gt;
                $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function showHint(str)&lt;br /&gt;
{&lt;br /&gt;
var xmlhttp;&lt;br /&gt;
if (str.length==0)&lt;br /&gt;
  { &lt;br /&gt;
  document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
if (window.XMLHttpRequest)&lt;br /&gt;
  {// code for IE7+, Firefox, Chrome, Opera, Safari&lt;br /&gt;
  xmlhttp=new XMLHttpRequest();&lt;br /&gt;
  }&lt;br /&gt;
else&lt;br /&gt;
  {// code for IE6, IE5&lt;br /&gt;
  xmlhttp=new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.onreadystatechange=function()&lt;br /&gt;
  {&lt;br /&gt;
  if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200)&lt;br /&gt;
    {&lt;br /&gt;
		//alert(xmlhttp.responseText);&lt;br /&gt;
    	//document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=xmlhttp.responseText;&lt;br /&gt;
		var chunk = xmlhttp.responseText.split(&amp;quot;*&amp;quot;);&lt;br /&gt;
		txt = &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
		for (i in chunk) {&lt;br /&gt;
			txt += &amp;quot;&amp;lt;li&amp;gt;&amp;quot;+chunk[i]+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		txt += &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
		setTimeout(function(){document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML= txt;},3000);&lt;br /&gt;
&lt;br /&gt;
    } else {&lt;br /&gt;
		document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=&amp;quot;&amp;lt;img src='img/ajax-loader.gif' /&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;,&amp;quot;php/gethint.php?q=&amp;quot;+str,true);&lt;br /&gt;
xmlhttp.send();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Start typing a name in the input field below:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot;&amp;gt; &lt;br /&gt;
First name: &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txt1&amp;quot; onkeyup=&amp;quot;showHint(this.value)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Suggestions: &amp;lt;span id=&amp;quot;txtHint&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//fitxer php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Fill up array with names&lt;br /&gt;
$a[]=&amp;quot;Anna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Brittany&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Cinderella&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Diana&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Eva&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Fiona&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Gunda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Hege&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Inga&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Johanna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Kitty&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Linda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Nina&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Ophelia&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Petunia&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Amanda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Raquel&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Cindy&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Doris&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Eve&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Evita&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Sunniva&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Tove&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Unni&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Violet&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Liza&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Elizabeth&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Ellen&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Wenche&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Vicky&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Maria&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Pere&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Rita&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Jordi&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Anna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Núria&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q=$_REQUEST[&amp;quot;q&amp;quot;]; &lt;br /&gt;
$hint=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;)&lt;br /&gt;
  { $q=strtolower($q); &lt;br /&gt;
    $len=strlen($q);&lt;br /&gt;
    foreach($a as $name)&lt;br /&gt;
    { if (stristr($q, substr($name,0,$len)))&lt;br /&gt;
      { if ($hint===&amp;quot;&amp;quot;)&lt;br /&gt;
        { $hint=$name; }&lt;br /&gt;
        else&lt;br /&gt;
        { $hint .= &amp;quot;*$name&amp;quot;; }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint were found&lt;br /&gt;
// or output the correct values&lt;br /&gt;
echo $hint===&amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici6-ajax&amp;diff=17942</id>
		<title>Solució exercici6-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici6-ajax&amp;diff=17942"/>
				<updated>2024-04-09T14:40:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//fitxer html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 6 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 6 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;input&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;Suggeriments:&lt;br /&gt;
    &amp;lt;div id=&amp;quot;contingut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
        var contingut = document.getElementById(&amp;quot;contingut&amp;quot;);&lt;br /&gt;
        var input = document.getElementById(&amp;quot;input&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        input.oninput = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;ex6.php?q=&amp;quot; + input.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                contingut.innerHTML = xhr.responseText;&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//fitxer php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;, &amp;quot;Brittany&amp;quot;, &amp;quot;Cinderella&amp;quot;, &amp;quot;Diana&amp;quot;, &amp;quot;Eva&amp;quot;, &amp;quot;Fiona&amp;quot;, &amp;quot;Gunda&amp;quot;, &amp;quot;Hege&amp;quot;, &amp;quot;Inga&amp;quot;, &amp;quot;Johanna&amp;quot;, &amp;quot;Kitty&amp;quot;, &amp;quot;Linda&amp;quot;, &amp;quot;Nina&amp;quot;, &amp;quot;Ophelia&amp;quot;, &amp;quot;Petunia&amp;quot;, &amp;quot;Amanda&amp;quot;, &amp;quot;Raquel&amp;quot;, &amp;quot;Cindy&amp;quot;, &amp;quot;Doris&amp;quot;, &amp;quot;Eve&amp;quot;, &amp;quot;Evita&amp;quot;, &amp;quot;Sunniva&amp;quot;, &amp;quot;Tove&amp;quot;, &amp;quot;Unni&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;Liza&amp;quot;, &amp;quot;Elizabeth&amp;quot;, &amp;quot;Ellen&amp;quot;, &amp;quot;Wenche&amp;quot;, &amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
    $q = strtolower($q);&lt;br /&gt;
    $len = strlen($q);&lt;br /&gt;
    foreach ($a as $name) {&lt;br /&gt;
        if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
            if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
                $hint = $name;&lt;br /&gt;
            } else {&lt;br /&gt;
                $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
function showHint(str)&lt;br /&gt;
{&lt;br /&gt;
var xmlhttp;&lt;br /&gt;
if (str.length==0)&lt;br /&gt;
  { &lt;br /&gt;
  document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=&amp;quot;&amp;quot;;&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
if (window.XMLHttpRequest)&lt;br /&gt;
  {// code for IE7+, Firefox, Chrome, Opera, Safari&lt;br /&gt;
  xmlhttp=new XMLHttpRequest();&lt;br /&gt;
  }&lt;br /&gt;
else&lt;br /&gt;
  {// code for IE6, IE5&lt;br /&gt;
  xmlhttp=new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.onreadystatechange=function()&lt;br /&gt;
  {&lt;br /&gt;
  if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200)&lt;br /&gt;
    {&lt;br /&gt;
		//alert(xmlhttp.responseText);&lt;br /&gt;
    	//document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=xmlhttp.responseText;&lt;br /&gt;
		var chunk = xmlhttp.responseText.split(&amp;quot;*&amp;quot;);&lt;br /&gt;
		txt = &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;;&lt;br /&gt;
		for (i in chunk) {&lt;br /&gt;
			txt += &amp;quot;&amp;lt;li&amp;gt;&amp;quot;+chunk[i]+&amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		txt += &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;&lt;br /&gt;
		setTimeout(function(){document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML= txt;},3000);&lt;br /&gt;
&lt;br /&gt;
    } else {&lt;br /&gt;
		document.getElementById(&amp;quot;txtHint&amp;quot;).innerHTML=&amp;quot;&amp;lt;img src='img/ajax-loader.gif' /&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
  }&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;,&amp;quot;php/gethint.php?q=&amp;quot;+str,true);&lt;br /&gt;
xmlhttp.send();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Start typing a name in the input field below:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot;&amp;gt; &lt;br /&gt;
First name: &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txt1&amp;quot; onkeyup=&amp;quot;showHint(this.value)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Suggestions: &amp;lt;span id=&amp;quot;txtHint&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//fitxer php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Fill up array with names&lt;br /&gt;
$a[]=&amp;quot;Anna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Brittany&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Cinderella&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Diana&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Eva&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Fiona&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Gunda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Hege&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Inga&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Johanna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Kitty&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Linda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Nina&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Ophelia&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Petunia&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Amanda&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Raquel&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Cindy&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Doris&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Eve&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Evita&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Sunniva&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Tove&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Unni&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Violet&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Liza&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Elizabeth&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Ellen&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Wenche&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Vicky&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Maria&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Pere&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Rita&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Jordi&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Anna&amp;quot;;&lt;br /&gt;
$a[]=&amp;quot;Núria&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q=$_REQUEST[&amp;quot;q&amp;quot;]; &lt;br /&gt;
$hint=&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;)&lt;br /&gt;
  { $q=strtolower($q); &lt;br /&gt;
    $len=strlen($q);&lt;br /&gt;
    foreach($a as $name)&lt;br /&gt;
    { if (stristr($q, substr($name,0,$len)))&lt;br /&gt;
      { if ($hint===&amp;quot;&amp;quot;)&lt;br /&gt;
        { $hint=$name; }&lt;br /&gt;
        else&lt;br /&gt;
        { $hint .= &amp;quot;*$name&amp;quot;; }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint were found&lt;br /&gt;
// or output the correct values&lt;br /&gt;
echo $hint===&amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17941</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17941"/>
				<updated>2024-04-09T14:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fitxer html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 4 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 4 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull una ciutat:&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;select name=&amp;quot;ciutat&amp;quot; id=&amp;quot;ciutat&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;barcelona&amp;quot;&amp;gt;Barcelona&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;lacoruna&amp;quot;&amp;gt;La Coruña&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;madrid&amp;quot;&amp;gt;Madrid&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;sevilla&amp;quot;&amp;gt;Sevilla&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull un barri:&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;select name=&amp;quot;barri&amp;quot; id=&amp;quot;barri&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var ciutat = document.getElementById(&amp;quot;ciutat&amp;quot;);&lt;br /&gt;
        var barri = document.getElementById(&amp;quot;barri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
        ciutat.onchange = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;exercici4.php?q=&amp;quot; + ciutat.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            barri.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                var arr_barris = (xhr.responseText).split(&amp;quot;,&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                arr_barris.forEach((_barri) =&amp;gt; {&lt;br /&gt;
                    var nouElement = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
                    var nodeText = document.createTextNode(_barri);&lt;br /&gt;
                    nouElement.appendChild(nodeText);&lt;br /&gt;
                    barri.appendChild(nouItem);&lt;br /&gt;
                })&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//hacer en firefox&lt;br /&gt;
&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17940</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17940"/>
				<updated>2024-04-09T14:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fitxer html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 4 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 4 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull una ciutat:&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;select name=&amp;quot;ciutat&amp;quot; id=&amp;quot;ciutat&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;barcelona&amp;quot;&amp;gt;Barcelona&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;lacoruna&amp;quot;&amp;gt;La Coruña&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;madrid&amp;quot;&amp;gt;Madrid&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;sevilla&amp;quot;&amp;gt;Sevilla&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull un barri:&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;select name=&amp;quot;barri&amp;quot; id=&amp;quot;barri&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var ciutat = document.getElementById(&amp;quot;ciutat&amp;quot;);&lt;br /&gt;
        var barri = document.getElementById(&amp;quot;barri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
        ciutat.onchange = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;ex4.php?q=&amp;quot; + ciutat.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            barri.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                var arr_barris = (xhr.responseText).split(&amp;quot;,&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                arr_barris.forEach((_barri) =&amp;gt; {&lt;br /&gt;
                    var nouElement = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
                    var nodeText = document.createTextNode(_barri);&lt;br /&gt;
                    nouElement.appendChild(nodeText);&lt;br /&gt;
                    barri.appendChild(nouItem);&lt;br /&gt;
                })&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//hacer en firefox&lt;br /&gt;
&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17939</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17939"/>
				<updated>2024-04-09T14:28:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fitxer html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ca&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Exercici 4 AJAX&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Exercici 4 AJAX&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull una ciutat:&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;select name=&amp;quot;ciutat&amp;quot; id=&amp;quot;ciutat&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;barcelona&amp;quot;&amp;gt;Barcelona&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;lacoruna&amp;quot;&amp;gt;La Coruña&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;madrid&amp;quot;&amp;gt;Madrid&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;sevilla&amp;quot;&amp;gt;Sevilla&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Escull un barri:&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;select name=&amp;quot;barri&amp;quot; id=&amp;quot;barri&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;-&amp;quot;&amp;gt;---------&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var ciutat = document.getElementById(&amp;quot;ciutat&amp;quot;);&lt;br /&gt;
        var barri = document.getElementById(&amp;quot;barri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var xhr = new XMLHttpRequest();&lt;br /&gt;
        ciutat.onchange = function () {&lt;br /&gt;
            xhr.open(&amp;quot;GET&amp;quot;, &amp;quot;ex4.php?q=&amp;quot; + ciutat.value);&lt;br /&gt;
            xhr.send(null);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        xhr.onreadystatechange = function () {&lt;br /&gt;
            barri.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if (xhr.readyState == 4 &amp;amp;&amp;amp; xhr.status == 200) {&lt;br /&gt;
                var arr_barris = (xhr.responseText).split(&amp;quot;,&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                arr_barris.forEach((_barri) =&amp;gt; {&lt;br /&gt;
                    var nouElement = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
                    var nodeText = document.createTextNode(_barri);&lt;br /&gt;
                    nouElement.appendChild(nodeText);&lt;br /&gt;
                    barri.appendChild(nouItem);&lt;br /&gt;
                })&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
//hacer en firefox&lt;br /&gt;
&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17938</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17938"/>
				<updated>2024-04-09T14:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
//hacer en firefox&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17937</id>
		<title>Solució exercici3-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici3-ajax&amp;diff=17937"/>
				<updated>2024-04-09T14:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;//hacer en firefox&lt;br /&gt;
&lt;br /&gt;
Fitxer javascript:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function peticionAjax(codigo, ciudad){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'ciudades.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                        if(document.getElementById(&amp;quot;barrios&amp;quot;)){&lt;br /&gt;
                            document.body.removeChild(document.getElementById(&amp;quot;barrios&amp;quot;));&lt;br /&gt;
                        }&lt;br /&gt;
			document.write(this.responseText);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;codigo=&amp;quot; + codigo;&lt;br /&gt;
    if(ciudad != null){&lt;br /&gt;
        content = content + &amp;quot;&amp;amp;ciudad=&amp;quot; +ciudad;&lt;br /&gt;
    }&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
   peticionAjax(&amp;quot;ciudades&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ajax(city){&lt;br /&gt;
   peticionAjax(&amp;quot;BARRIOS&amp;quot;,city);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici3.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function checkPost(){&lt;br /&gt;
    if(isset($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
        switch (strtoupper($_REQUEST[&amp;quot;codigo&amp;quot;])){&lt;br /&gt;
            case &amp;quot;CIUDADES&amp;quot;:&lt;br /&gt;
                echo selectCiudades();&lt;br /&gt;
                exit();&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;quot;BARRIOS&amp;quot;:&lt;br /&gt;
                if(isset($_REQUEST[&amp;quot;ciudad&amp;quot;])){&lt;br /&gt;
                    echo selectBarrios(strtoupper($_REQUEST[&amp;quot;ciudad&amp;quot;]));&lt;br /&gt;
                    exit();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function selectCiudades(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='ciudades' onchange='ajax(this.value);'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='BARCELONA'&amp;gt;BARCELONA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='MADRID'&amp;gt;MADRID&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='SEVILLA'&amp;gt; SEVILLA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option value ='CORUÑA'&amp;gt;LA CORUÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selectBarrios($ciudades){&lt;br /&gt;
    switch ($ciudades){&lt;br /&gt;
        case &amp;quot;BARCELONA&amp;quot;:&lt;br /&gt;
            return getBarcelona();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;MADRID&amp;quot;:&lt;br /&gt;
            return getMadrid();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;SEVILLA&amp;quot;:&lt;br /&gt;
            return getSevilla();&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;CORUÑA&amp;quot;:&lt;br /&gt;
            return getCoruna();&lt;br /&gt;
            break;&lt;br /&gt;
        default :&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getBarcelona(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;EIXAMPLE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GRACIA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;LES CORTS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;RAVAL&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;GLORIAS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getMadrid(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CHUECA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MALASAÑA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;SALAMANCA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;COSLADA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getSevilla(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;TRIANA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;MACARENA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ALAMEDA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;BAMI&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getCoruna(){&lt;br /&gt;
    $html = &amp;quot;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;select id='barrios'&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;----------&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ZALAETA&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ENSANCHE&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;CUATRO CAMINOS&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;option&amp;gt;ORILLAMAR&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
    $html = $html . &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
    return $html;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkPost();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17936</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17936"/>
				<updated>2024-04-09T14:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici espera]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici2-ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
:[[solució exercici3-ajax]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici2-ajax&amp;diff=17921</id>
		<title>Solució exercici2-ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici2-ajax&amp;diff=17921"/>
				<updated>2024-04-03T15:40:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''POST'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fitxer js:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function ajax(){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('POST', 'http://172.16.105.107/ajax/majuscules.php');&lt;br /&gt;
    xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);//Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('content').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var content = &amp;quot;nombre=&amp;quot; +document.getElementById(&amp;quot;nom&amp;quot;).value + &amp;quot;&amp;amp;apellido=&amp;quot; + document.getElementById(&amp;quot;cognom&amp;quot;).value;&lt;br /&gt;
    xhr.send(content);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
function inici(){&lt;br /&gt;
   document.getElementById(&amp;quot;boton&amp;quot;).onclick = ajax; &lt;br /&gt;
}&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer html:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici2.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;nom:&amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;nom&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;cognom:&amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;cognom&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;boton&amp;quot;&amp;gt;enviar&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;TODO write content&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
if(isset($_POST[&amp;quot;nombre&amp;quot;]) &amp;amp;&amp;amp; isset($_POST[&amp;quot;apellido&amp;quot;])){&lt;br /&gt;
    $nom = $_POST[&amp;quot;nombre&amp;quot;];&lt;br /&gt;
    $cog = $_POST[&amp;quot;apellido&amp;quot;];&lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;&amp;lt;h2&amp;gt;Nom: &amp;quot;.strtoupper($nom).&amp;quot;&amp;lt;/h2&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;Cognom:&amp;quot;. strtoupper($cog).&amp;quot;&amp;lt;/h2&amp;gt;&amp;quot;;&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;ERROR&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
 window.onload=function(){&lt;br /&gt;
  var datos;&lt;br /&gt;
 &lt;br /&gt;
  function mostrar_datos () {&lt;br /&gt;
    if (datos.readyState == 4  &amp;amp;&amp;amp; datos.status == 200) &lt;br /&gt;
&lt;br /&gt;
var parrafo = document.createElement(&amp;quot;p&amp;quot;);&lt;br /&gt;
var contenido = document.createTextNode(datos.responseText);&lt;br /&gt;
parrafo.appendChild(contenido);&lt;br /&gt;
document.body.appendChild(parrafo);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function iniciar() {&lt;br /&gt;
    var url    = './mayus.php';&lt;br /&gt;
    var params = 'nom='+ f.curso.value +'&amp;amp;cognom='+ f.tutor.value;&lt;br /&gt;
    datos = new XMLHttpRequest();&lt;br /&gt;
    datos.open(&amp;quot;GET&amp;quot;,url+'?'+params,true);&lt;br /&gt;
    datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
    datos.send(null);    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  document.getElementById(&amp;quot;boton&amp;quot;).onclick=iniciar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
   &amp;lt;form name=&amp;quot;f&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;mayus.php&amp;quot;&amp;gt; &lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot; /&amp;gt;   &lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;cognom&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;button id=&amp;quot;boton&amp;quot;&amp;gt;botón&amp;lt;/button&amp;gt;&lt;br /&gt;
      &lt;br /&gt;
   &amp;lt;/form&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = $_REQUEST['nom'];&lt;br /&gt;
$cognom = $_GET['cognom'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nom &amp;quot;.$nom.&amp;quot; cognom &amp;quot;.$cognom ;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici_espera&amp;diff=17920</id>
		<title>Solució exercici espera</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici_espera&amp;diff=17920"/>
				<updated>2024-04-03T15:39:05Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &amp;gt;&lt;br /&gt;
            var xhr;&lt;br /&gt;
&lt;br /&gt;
            function inici() {&lt;br /&gt;
                if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
                    xhr = new XMLHttpRequest();&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                xhr.open('GET', 'espera.php', true);&lt;br /&gt;
&lt;br /&gt;
                xhr.onreadystatechange = function () {&lt;br /&gt;
                  &lt;br /&gt;
                        if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
                            switch (xhr.readyState) { //Según el estado de la petición devolvemos un Texto.&lt;br /&gt;
                                case 0:&lt;br /&gt;
                                    document.getElementById('1').innerHTML = &amp;quot;Sin iniciar&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                case 1:&lt;br /&gt;
                                    document.getElementById('2').innerHTML = &amp;quot;Cargando&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                case 2:&lt;br /&gt;
                                    document.getElementById('3').innerHTML = &amp;quot;Cargado&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                case 3:&lt;br /&gt;
                                    document.getElementById('4').innerHTML = &amp;quot;Interactivo&amp;quot;;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                case 4:&lt;br /&gt;
                                    document.getElementById('5').innerHTML = &amp;quot;Completado&amp;quot;;&lt;br /&gt;
                                    //Si ya hemos completado la petición, devolvemos además la información. &lt;br /&gt;
                                    document.getElementById('resultado').innerHTML = xhr.responseText;&lt;br /&gt;
                                    break;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                    &lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
&lt;br /&gt;
                xhr.send(null);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            window.onload = inici;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;table border=&amp;quot;4&amp;quot;&amp;gt; &lt;br /&gt;
            &amp;lt;tr&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;1&amp;quot;&amp;gt;Estado petición&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;!--Campo para indicar el estado de la petición--&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;2&amp;quot;&amp;gt;Estado petición&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;3&amp;quot;&amp;gt;Estado petición&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;4&amp;quot;&amp;gt;Estado petición&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;5&amp;quot;&amp;gt;Estado petición&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
                &amp;lt;td&amp;gt;&amp;lt;span id=&amp;quot;resultado&amp;quot;&amp;gt;Sin resultado&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;  &lt;br /&gt;
            &amp;lt;/tr&amp;gt;  &lt;br /&gt;
        &amp;lt;/table&amp;gt; &lt;br /&gt;
        &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fitxer espera.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo date('h:i:s') . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//sleep for 5 seconds&lt;br /&gt;
sleep(4);&lt;br /&gt;
&lt;br /&gt;
//start again&lt;br /&gt;
echo date('h:i:s');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
el mateix amb fitxer espera.jsp&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jsp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% &lt;br /&gt;
Thread.sleep(1000); &lt;br /&gt;
out.print(&amp;quot;Ahora la espera es menos molesta.&amp;quot;); &lt;br /&gt;
%&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici1-Ajax&amp;diff=17919</id>
		<title>Solució exercici1-Ajax</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Soluci%C3%B3_exercici1-Ajax&amp;diff=17919"/>
				<updated>2024-04-03T15:37:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fitxer Javascript:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
&lt;br /&gt;
function inici(){&lt;br /&gt;
    if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
            xhr = new XMLHttpRequest();&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
            throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    xhr.open('GET', 'info.php');&lt;br /&gt;
    &lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('content').innerHTML = this.responseText;&lt;br /&gt;
//La propiedad responseText se utiliza para tratar los datos recibidos desde el servidor que no tienen formato XML, podremos acceder a los datos siempre y cuando el estado de la conexión devuelto con readyStatechange sea igual a 3 (recibiendo) o 4 (a punto). &lt;br /&gt;
//Siempre que podamos intentaremos usar responseXML en lugar de responseText y XML para la los datos en lugar de texto plano.&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    xhr.send(null);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = inici;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer HTML:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;exercici1.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;TODO write content&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fitxer PHP:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
echo phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17918</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17918"/>
				<updated>2024-04-03T13:57:45Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici espera]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici2-ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--:[[solució exercici3-ajax]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17917</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17917"/>
				<updated>2024-04-03T13:55:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercicis amb XMLHttpRequest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici espera]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &amp;lt;!----&amp;gt;:[[solució exercici2-ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--:[[solució exercici3-ajax]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17916</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17916"/>
				<updated>2024-04-03T13:54:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt; :[[solució exercici espera]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici2-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--:[[solució exercici3-ajax]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17915</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17915"/>
				<updated>2024-04-03T13:54:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercici 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;:[[solució exercici1-Ajax]]&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!-- :[[solució exercici espera]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici2-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--:[[solució exercici3-ajax]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17910</id>
		<title>NF1 - AJAX</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF1_-_AJAX&amp;diff=17910"/>
				<updated>2024-03-22T09:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Solucions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AJAX =&lt;br /&gt;
&lt;br /&gt;
Ajax significa Asynchronous JavaScript i XML, un terme que va ser encunyat per Jesse James Garrett en Adaptive Path, el febrer de 2005. S'hi descriu una metodologia de desenvolupament d'aplicacions web d'una manera diferent a la tradicional. &lt;br /&gt;
Segons l'article, les aplicacions web i llocs tradicionals funcionen sincrònicament-cada vegada &lt;br /&gt;
segueix un enllaç, o quan s'envia un formulari, el navegador envia les dades al servidor, el servidor (amb sort) respon, i tota la pàgina s'actualitza.&lt;br /&gt;
Aplicacions Ajax funcionen de forma asíncrona, el que significa que envies dades d'anada i tornada entre el navegador i el servidor sense haver de recarregar tota la pàgina. Substitueix només les parts de la pàgina que canvia. &lt;br /&gt;
[[Fitxer:ajax_vs_traditional.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El realment bo d'això és que la comunicació entre el motor Ajax i el navegador passa a través de JavaScript i no a través de carregar la pàgina. &lt;br /&gt;
En termes pràctics, això significa per a l'usuari final menys temps d'espera per carregar les pàgines i la visualització, i més fàcil la interacció amb la pàgina, per que pots sol·licitar dades i continuar llegint el text o el contingut d'una altre part de la pàgina.&lt;br /&gt;
== Els principals elements d'AJAX ==&lt;br /&gt;
Ajax no és una tecnologia única. Més aviat, és una col·lecció de quatre tecnologies que es complementen:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Tecnologia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Expliació&lt;br /&gt;
|-&lt;br /&gt;
| JavaScript ||És un llenguatge de scripting de propòsit general dissenyat per a ser integrat dins les aplicacions. L'intèrpret de JavaScript en un navegador web permet la interacció programàtica amb moltes de les capacitats incorporades del navegador. Aplicacions Ajax estan escrits en JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
| Cascading Style Sheets (CSS) || Ofereix una forma de definir els estils visuals reutilitzables per a elements de la pàgina web. Ofereix una forma senzilla i potent de definir i aplicar un estil visual consistent. En una aplicació Ajax, l'estil d'una interfície d'usuari es pot ajustar de forma interactiva a través de CSS.&lt;br /&gt;
|-&lt;br /&gt;
| Document Object Model (DOM) ||El DOM presenta l'estructura de les pàgines web com un conjunt d'objectes programables que poden ser manipulats amb JavaScript. Scripts del DOM permet a una aplicació Ajax modificar la interfície d'usuari sobre la marxa, tornar a dibuixar de manera efectiva les parts de la pàgina.&lt;br /&gt;
|-&lt;br /&gt;
| XMLHttpRequest object (XHR) || El objecte XMLHttpRequest permet que els programadors web recuperarin les dades des del servidor web com una activitat de fons. El format de dades és típicament XML, però funciona bé amb totes les dades basades en text.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Funcionament ==&lt;br /&gt;
L'objecte XHR ens permet fer peticions HTTP al servidor i rebre la resposta mitjançant programació , en lloc que el navegador doni automàticament la resposta com una nova pàgina . &lt;br /&gt;
El primer que hem de fer és crear un objecte XHR. A continuació , proporcionar-li la informació que necessita per realitzar la sol·licitud i finalment , gestionar la resposta quan ens la donen.Entre l'enviament de la sol·licitudi la recepció de la resposta , hi ha feina per fer en el servidor, i algunes linies més de codi que hem d'escriure en PHP, Java, .NET o qualsevol altre. &lt;br /&gt;
&lt;br /&gt;
Ens interessa principalment el codi del costat del client, a més la mecànica del costat del servidor de maneig d'una senzilla&lt;br /&gt;
petició Ajax no són molt diferents de programació web pre-Ajax.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:lifecycle-ajax.png|center]]&lt;br /&gt;
&lt;br /&gt;
===El API XMLHttpRequest===&lt;br /&gt;
El cor d'AJAX és una API anomenada XMLHttpRequest(XHR), disponible en els llenguatges de scripting en el costat del client,com ara JavaScript. S'utilitza per realitzar peticions, HTTP o HTTPS, directament al servidor web, i per carregar les respostes directament a la pàgina del client. Les dades que rebem des del servidor es poden rebre en forma de text pla o text XML. Aquestes dades podran ser utilitzats per modificar el DOM del document actual, sense haver de recarregar la pàgina, o també podran ser avaluats amb JavaScript, si són rebuts en format JSON.&lt;br /&gt;
XMLHttpRequest juga un paper molt important en la tècnica AJAX, ja que sense aquest objecte, no seria possible realitzar les peticions asíncrones al servidor.&lt;br /&gt;
Una de les limitacions de XMLHTTPR equest és que, per seguretat, només ens deixa realitzar peticions AJAX, a les pàgines que es trobin allotjades en el mateix domini, des del qual s'està realitzant la petició AJAX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== L'objecte XHR (XMLHttpRequest) ===&lt;br /&gt;
En un món perfecte, el codi escrit per a un navegador funcionaria en tots els navegadors. Ja hem après que no vivim en aquest món, i les coses no són diferents quan es tracta d'Ajax. Hi ha una manera estàndard de fer peticions asíncrones a través de l'objecte JavaScript XHR, i una manera patentada Internet Explorer que utilitza un control ActiveX. Amb IE 7, un embolcall que emula la interfície estàndard està disponible, però IE 6 requereix codi diferent.&lt;br /&gt;
Un cop creat l'objecte XHR, el codi per configurar, iniciar i respondre a la sol·licitud és relativament independent del navegador, i la creació d'una instància de XHR és fàcil per a qualsevol navegador en particular. El problema és que els diferents navegadors implementen XHR de diferents maneres, i hem de crear la instància de la manera adequada per al navegador actual.&lt;br /&gt;
Utilitzarem la técnica ''featured detection'' per averiguar quin objecte XHR podem crear pel navegador actual. &lt;br /&gt;
Exemple de la '''creació''' d'aquest Objecte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var xhr;&lt;br /&gt;
if (window.ActiveXObject) { //Iexplorer&lt;br /&gt;
	xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else if (window.XMLHttpRequest) { //Tots els altres navegadors que soporten ajax&lt;br /&gt;
	xhr = new XMLHttpRequest();&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	throw new Error(&amp;quot;Ajax is not supported by this browser&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mètodes i propietats de l'objecte XHR ===&lt;br /&gt;
Primer donem una ullada als mètodes del Objecte XMLHttpRequest:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Mètode&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| abort() || Fa que la Sol·licitud que s'està executant sigui cancel·lada.&lt;br /&gt;
|-&lt;br /&gt;
| getAllResponseHeaders() || Retorna una cadena que conté els noms i valors de totes les capçaleres de resposta.&lt;br /&gt;
|-&lt;br /&gt;
| getResponseHeader(name) || Retorna el valor de la capçalera de la resposta anomenada 'named'.&lt;br /&gt;
|-&lt;br /&gt;
| open(method,url,async, username,password)  || Estableix el mètode HTTP (GET o POST) i l'URL de destinació de la sol·licitud. Opcionalment, la sol·licitud pot ser declarada síncrona (async=false), i es pot subministrar un nom d'usuari i contrasenya per a les sol·licituds que requereixen autenticació.&lt;br /&gt;
|-&lt;br /&gt;
| send(dades) ||dades: S'usa en el cas que estiguem utilitzant el mètode POST, com a mètode d'enviament.Si fem servir GET, dades serà null&lt;br /&gt;
|-&lt;br /&gt;
| setRequestHeader(name,value)  || Afegeix el parell etiqueta / valor a la capçalera de dades que s'enviarà al servidor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemples amb els diferents mètodes de enviament d'informació (GET i POST):&lt;br /&gt;
*Exemple amb GET: Amb el mètode GET els paràmetres es passen a la mateixa URL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;GET&amp;quot;, &amp;quot;datos.php?curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;, true);&lt;br /&gt;
xmlhttp.send(null);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Exemple amb POST: Con el método POST los parámetros se pasan con la función datos.send().&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xmlhttp.open(&amp;quot;POST&amp;quot;,&amp;quot;datos.php&amp;quot;,true);&lt;br /&gt;
xmlhttp.setRequestHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
xmlhttp.send(&amp;quot;curso=SMX1&amp;amp;tutor=Julio+Noguera&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si no s'estableix la capçalera &amp;quot;Content-Type&amp;quot; correcta, el servidor descarta totes les dades enviades mitjançant el mètode POST. D'aquesta manera, al programa que s'executa en el servidor no li arriba cap paràmetre. Així, per enviar paràmetres mitjançant el mètode POST, és obligatori incloure la capçalera &amp;quot;Content-Type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Propietats del Objecte XMLHttpRequest:===&lt;br /&gt;
&lt;br /&gt;
L'objecte XMLHttpRequest, disposa de les següents propietats, que ens faciliten informació sobre el estat de la petició al servidor, i on rebrem les dades de la resposta retornada a la petició AJAX:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;100 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Propietat&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;450 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Descripció&lt;br /&gt;
|-&lt;br /&gt;
| onreadystatechange  || Emmagatzema una funció (o el nom d'una funció), que serà cridada automàticament, cada vegada que es produeixi un canvi en la propietat readyState.&lt;br /&gt;
|-&lt;br /&gt;
| readyState ||Emmagatzema l'estat de la petició XMLHTTPRequest. Possibles estats, del 0 al 4:&lt;br /&gt;
'''0:''' sol·licitud no inicialitzada.&lt;br /&gt;
&lt;br /&gt;
'''1:''' connexió establerta amb el servidor.&lt;br /&gt;
&lt;br /&gt;
'''2:''' sol·licitud rebuda.&lt;br /&gt;
&lt;br /&gt;
'''3:''' processant sol·licitud.&lt;br /&gt;
&lt;br /&gt;
'''4:''' sol·licitud ja acabada i la resposta està disponible.&lt;br /&gt;
|-&lt;br /&gt;
| responseText || Conté les dades de resposta, com una cadena de text.&lt;br /&gt;
|-&lt;br /&gt;
| responseXML  ||  Si es responseText és XML aqui trobem l'arbre XML DOM associat. Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc.).Retorna un [object XMLDocument]&lt;br /&gt;
|-&lt;br /&gt;
| status  || El codi d'estat de resposta retornat pel servidor. Per exemple: 200 per a l'èxit o el 404 perquè no es troba. Consulteu l'especificació [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 HTTP] per a tot el conjunt de codis.&lt;br /&gt;
|-&lt;br /&gt;
| statusText  || El missatge de text de l'estat retornat pel servidor. (per exemple: &amp;quot;Not Found&amp;quot; o &amp;quot;OK&amp;quot;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Utilització de l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
Ara que tenim una instància XHR creada, donem una ullada al que es necessita per configurar i executar la sol·licitud al servidor.&lt;br /&gt;
&lt;br /&gt;
*Especificar un mètode HTTP com GET o POST&lt;br /&gt;
*Especificar la URL del servidor al que demanarem la informació a mostrar a l'usuari&lt;br /&gt;
*Especificar a l'objecte XHR la manera que volem saber del progrès de la petició&lt;br /&gt;
*Especificar la informació a enviar al servidor (content).&lt;br /&gt;
&lt;br /&gt;
Amb la següent sentencia javascript especifiquem els primers dos items del llistat anterior:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.open('GET', 'url');&lt;br /&gt;
o&lt;br /&gt;
xhr.open('POST', 'url');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Tingues en compte que la sentencia anterior no envia res al servidor, només estem configurant l'objecte per tal que utilitzi un servidor i un mètode de conexió HTTP.&lt;br /&gt;
&lt;br /&gt;
El tercer item diu que hem de dotar a l'objecte XHR amb un mecanisme d'avís per fer-nos saber com va la petició ajax. Per fer-ho, s'ha d'assignar una funció de resposta (callback function) a la propietat ''onreadystatechange'' del objecte XHR. Aquesta funció l'executarà l'objecte XHR en diverses ocasions, segons l'estat amb el que es trobi l'objecte.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) { &lt;br /&gt;
			// només ens interesa si la petició al servidor &lt;br /&gt;
			// s'ha completat i ha estat correcta.&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			// problema amb la petició&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A l'últim item s'ha d'especificar, si hi ha, la informació necessaria que necessita saber el servidor per tal de processar correctament la petició. Finalment, enviar la petició. Aixó s'aconsegueix amb el mètode ''send()'' de l'objecte XHR.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xhr.send(&amp;quot;a=1&amp;amp;b=2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resposta del servidor mitjançant l'objecte XHR ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vegada s'ha completat la petició al servidor podem agafar la seva resposta (response) del objecte XHR. El format de la resposta pot ser qualsevol format en mode TEXT; no està limitat a XML. De fet, la majoria del temps, la resposta de Ajax és un altre format. Aquest pot ser text planer, un fragment HTML o pot ser una representació d'objecte de JavaScript com és JSON.&lt;br /&gt;
&lt;br /&gt;
Sigui quin sigui el format del text, la resposta es pot obtenir mitjançant la propietat ''responseText'' del objecte XHR. Si la resposta està en format XML, per que s'ha especificat utilitzant el tipus MIME '''text/xml''' o '''application/xml''', es tractada i es crea un arbre DOM que està disponible a la propietat responseXML del objecte XHR. &lt;br /&gt;
&lt;br /&gt;
Una vegada tenim la resposta del servidor la hem de carregar al element DOM apropiat.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
xhr.onreadystatechange = function() {&lt;br /&gt;
	if (this.readyState == 4) {&lt;br /&gt;
		if (this.status &amp;gt;= 200 &amp;amp;&amp;amp; this.status &amp;lt; 300) {&lt;br /&gt;
			document.getElementById('someContainer').innerHTML = this.responseText;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       var objetoXHR = new XMLHttpRequest();&lt;br /&gt;
&lt;br /&gt;
       function obtenerDatosServidor(origen, elemento)     //Función “obtenerDatosServidor” contiene dos parámetros&lt;br /&gt;
       {&lt;br /&gt;
           var objeto_destino = document.getElementById(elemento); // Se elige el elemento HTML a ser modificado.&lt;br /&gt;
           objetoXHR.open(“GET”, origen);                 //Se configura una conexión asíncrona con una URL.&lt;br /&gt;
           objetoXHR.onreadystatechange = respuesta;    // Se indica la función a ser llamada una vez el estado&lt;br /&gt;
                                                          // del objeto cambie. &lt;br /&gt;
           objetoXHR.send(null);                          // Se abre la conexión.&lt;br /&gt;
       }&lt;br /&gt;
     &lt;br /&gt;
       function respuesta()&lt;br /&gt;
       {&lt;br /&gt;
            if (objetoXHR.readyState == 4 &amp;amp;&amp;amp; objetoXHR.status == 200) &lt;br /&gt;
            {&lt;br /&gt;
            objeto_destino.innerHTML = objetoXHR.responseText;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO GET EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$seleccion = $_GET['curso'];&lt;br /&gt;
$tutor = $_GET['tutor'];&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GET con AJAX'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
        window.onload = function () {&lt;br /&gt;
            let datos;&lt;br /&gt;
&lt;br /&gt;
            function mostrar_datos() {&lt;br /&gt;
                if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                    document.getElementById(&amp;quot;resultado&amp;quot;).innerHTML = datos.responseText;&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function iniciar() {&lt;br /&gt;
                var url = 'get.php';&lt;br /&gt;
                var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
                datos = new XMLHttpRequest();&lt;br /&gt;
                datos.open(&amp;quot;GET&amp;quot;, url + '?' + params, true);&lt;br /&gt;
                datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
                datos.send(null);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            document.getElementById(&amp;quot;boton&amp;quot;).onclick = iniciar;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;get&amp;quot; action=&amp;quot;get.php&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot; selected&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot;&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; name=&amp;quot;boton&amp;quot; value=&amp;quot;ok&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;CONTENIDO:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt;resultado&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/b7GuKxIQYOg&lt;br /&gt;
&lt;br /&gt;
===EJEMPLO POST EN AJAX===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$seleccion = $_POST['curso'];&lt;br /&gt;
$tutor = $_POST['tutor'];&lt;br /&gt;
echo &amp;quot;curso &amp;quot;.$seleccion.&amp;quot; tutor &amp;quot;.$tutor;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST con AJAX'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var datos;&lt;br /&gt;
&lt;br /&gt;
        function pedir_datos(url, params) {&lt;br /&gt;
            datos = new XMLHttpRequest();&lt;br /&gt;
            datos.open(&amp;quot;POST&amp;quot;, url, true);&lt;br /&gt;
            datos.onreadystatechange = mostrar_datos;&lt;br /&gt;
            datos.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;
            //Llamamos al método setRequestHeader indicando que los datos a enviarse están codificados como un formulario.&lt;br /&gt;
            datos.send(params);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function mostrar_datos() {&lt;br /&gt;
            if (datos.readyState == 4 &amp;amp;&amp;amp; datos.status == 200)&lt;br /&gt;
                document.getElementById('resultado').innerHTML = datos.responseText;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function iniciar() {&lt;br /&gt;
            var url = 'post.php';&lt;br /&gt;
            var params = formulario.curso.name + '=' + formulario.curso.value + '&amp;amp;' + formulario.tutor.name + '=' + formulario.tutor.value;&lt;br /&gt;
            pedir_datos(url, params);&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form name=&amp;quot;formulario&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;javascript: iniciar()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Curso: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;curso&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX1&amp;quot;&amp;gt; SMX1 &amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;SMX2&amp;quot; selected&amp;gt; SMX2 &amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;Tutor: &amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;tutor&amp;quot; value=&amp;quot;Julio Noguera&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;boton&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;resultado&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CORS'''&lt;br /&gt;
&lt;br /&gt;
Esta cabecera la ponemos para que peticiones AJAX se acepten desde fuera del dominio. Sin ella, no funcionaria las peticiones al hosting XXXXX.&lt;br /&gt;
&lt;br /&gt;
Esta cabecera NO debe estar si haceis peticiones AJAX entre un mismo dominio&lt;br /&gt;
&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Origin: *&amp;quot;);  &lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/ULSCT3nYzJ8&lt;br /&gt;
&lt;br /&gt;
===FETCH===&lt;br /&gt;
&lt;br /&gt;
API fetch es que utiliza promesas, es decir, devuelve un objeto con dos métodos, uno then() y otro catch() a la que pasaremos una función que será invocada cuando se obtenga la respuesta o se produzca un error.&lt;br /&gt;
&lt;br /&gt;
Aquí hay que aclarar un punto con los errores: si se devuelve un código HTTP correspondiente a un error no se ejecutará el catch(), ya que se ha obtenido una respuesta válida, por lo que se ejecutará el then(). Sólo si hay un error de red o de otro tipo se ejecutará el catch().&lt;br /&gt;
&lt;br /&gt;
Otro aspecto importante que hay que comprender es que para obtener el body o cuerpo del mensaje devuelto por el servidor deberemos obtener una segunda promesa por medio de los métodos del objeto Response. Por ello será muy habitual ver dos promesas encadenadas, una para el fetch() y otra con el retorno del método que utilicemos para obtener el body.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
fetch('https://httpbin.org/ip')&lt;br /&gt;
    .then(function(response) { //Este objeto 'response' contiene la respuesta que hace el servidor y dispone de una serie de propiedades con los valores de esa respuesta&lt;br /&gt;
        console.log('response.body =', response.body);&lt;br /&gt;
        console.log('response.bodyUsed =', response.bodyUsed);&lt;br /&gt;
        console.log('response.headers =', response.headers);&lt;br /&gt;
        console.log('response.ok =', response.ok);&lt;br /&gt;
        console.log('response.status =', response.status);&lt;br /&gt;
        console.log('response.statusText =', response.statusText);&lt;br /&gt;
        console.log('response.type =', response.type);&lt;br /&gt;
        console.log('response.url =', response.url);&lt;br /&gt;
        return response.text();&lt;br /&gt;
    })&lt;br /&gt;
    .then(function(data) {&lt;br /&gt;
        console.log('data = ', data);&lt;br /&gt;
    })&lt;br /&gt;
    .catch(function(err) {&lt;br /&gt;
        console.error(err);&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-hemos llamado a fetch() con la URL a la que queremos acceder como parámetro esta llamada nos devuelve una promesa&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa nos entrega un objeto response&lt;br /&gt;
&lt;br /&gt;
-del objeto response llamamos al método text() para obtener el cuerpo retornado en forma de texto&lt;br /&gt;
&lt;br /&gt;
-nos devuelve otra promesa que se resolverá cuando se haya obtenido el contenido&lt;br /&gt;
&lt;br /&gt;
-el método then() de esa promesa recibe el cuerpo devuelto por el servidor en formato de texto&lt;br /&gt;
&lt;br /&gt;
-hemos incluido un catch() por si se produce algún error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let data = new FormData();   &lt;br /&gt;
// También se puede enviar cambiando el FormData&lt;br /&gt;
// data = new URLSearchParams(&amp;quot;profesor=Julio&amp;amp;INS=La Merce&amp;quot;);&lt;br /&gt;
data.append('profesor', 'Julio');&lt;br /&gt;
data.append('INS', 'La Mercè');&lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: data&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
   if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;INS&amp;quot;].$_POST[&amp;quot;profesor&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OTRA FORMA RECUPERANDO DATOS DEL FORMULARIO'''&lt;br /&gt;
&lt;br /&gt;
'''HTML'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form  action='./datos.php' id=&amp;quot;formulario&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
  Input1: &amp;lt;input name='input1'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  Input2: &amp;lt;input name='input2'&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;input type='submit'&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var testForm = document.getElementById('formulario');&lt;br /&gt;
    testForm.onsubmit = function(event) {   //en el momento que se activa un botón submit&lt;br /&gt;
    event.preventDefault();   //evita que se propague el evento recargando la página.&lt;br /&gt;
    var formData = new FormData(document.getElementById('formulario'));  //recupera los datos del formulario.&lt;br /&gt;
   &lt;br /&gt;
fetch('./datos.php', {&lt;br /&gt;
   method: 'POST',&lt;br /&gt;
   body: formData&lt;br /&gt;
})&lt;br /&gt;
.then(function(response) {&lt;br /&gt;
      if(response.ok) {&lt;br /&gt;
       return response.text()&lt;br /&gt;
   } else {&lt;br /&gt;
       throw &amp;quot;Error en la llamada Ajax&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
.then(function(texto) {&lt;br /&gt;
   console.log(texto);&lt;br /&gt;
})&lt;br /&gt;
.catch(function(err) {&lt;br /&gt;
   console.log(err);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SERVIDOR'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
echo $_POST[&amp;quot;input1&amp;quot;].$_POST[&amp;quot;input2&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
Promeses: https://www.youtube.com/watch?v=pHBmmbDQl0o&lt;br /&gt;
&lt;br /&gt;
FETCH: https://youtu.be/6BeO1gObVS8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://www.todojs.com/api-fetch-el-nuevo-estandar-que-permite-hacer-llamadas-http/&lt;br /&gt;
&lt;br /&gt;
https://cursos.mejorcodigo.net/article/el-fetch-api-en-javascript-43&lt;br /&gt;
&lt;br /&gt;
https://desarrolloweb.com/articulos/fetch-post-ajax-javascript.html&lt;br /&gt;
&lt;br /&gt;
===AXIOS===&lt;br /&gt;
&lt;br /&gt;
Axios es una librería  JavaScript que puede ejecutarse en el navegador y que nos permite hacer sencillas las operaciones como cliente HTTP, por lo que podremos configurar y realizar solicitudes a un servidor y recibiremos respuestas fáciles de procesa.&lt;br /&gt;
&lt;br /&gt;
Así que Axios es una alternativa que nos brinda multitud de ventajas:&lt;br /&gt;
&lt;br /&gt;
*La API es unificada para las solicitudes Ajax.&lt;br /&gt;
*Está optimizado para facilitar el consumo de servicios web, API REST y que devuelvan datos JSON.&lt;br /&gt;
*De fácil utilización y como complemento perfecto para las páginas convencionales.&lt;br /&gt;
*Pesa poco, apenas 13KB minimizado. Menos aún si se envía comprimido al servidor.&lt;br /&gt;
*Compatibilidad con todos los navegadores en sus versiones actuales.&lt;br /&gt;
&lt;br /&gt;
'''TABLA COMPARATIVA'''&lt;br /&gt;
&lt;br /&gt;
https://www.javascriptstuff.com/ajax-libraries/&lt;br /&gt;
&lt;br /&gt;
'''GET''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://unpkg.com/axios/dist/axios.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 axios({&lt;br /&gt;
    url: 'https://api.github.com/users/julio', //Endpoint&lt;br /&gt;
    method: 'GET',  //Método&lt;br /&gt;
    timeout: 3000,  //Tiempo máximo de espera&lt;br /&gt;
    responseType: 'JSON',  //Tipo de respuesta (Por defecto es JSON)&lt;br /&gt;
    }).then(function (response) {&lt;br /&gt;
       //Si todo OK te imprime la respuesta&lt;br /&gt;
       console.log(response.data); //Datos de la respuesta&lt;br /&gt;
       console.log(response.status); //Estatus&lt;br /&gt;
       console.log(response.statusText); //Mensaje del estatus&lt;br /&gt;
       console.log(response.headers); // Encabezados&lt;br /&gt;
    }).catch(function (error) {&lt;br /&gt;
       //Si hay error el catch lo imprime&lt;br /&gt;
       console.log(error.response); //Objeto respuesta&lt;br /&gt;
       console.log(error.response.data); // Respuesta del servidor&lt;br /&gt;
       console.log(error.response.status); //Código de error&lt;br /&gt;
       console.log(error.response.statusText); //Mensaje del error&lt;br /&gt;
   });&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios({&lt;br /&gt;
                url: 'data.php',&lt;br /&gt;
                method: 'POST',&lt;br /&gt;
                data: data&lt;br /&gt;
            }).then(function (response) {&lt;br /&gt;
                console.log(response.data);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error.response.statusText);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA GET'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    axios.get('/user?ID=12345')&lt;br /&gt;
      .then(function (response) {&lt;br /&gt;
        console.log(response);&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function (error) {&lt;br /&gt;
        console.log(error);&lt;br /&gt;
      });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMA MÁS ABREVIADA POST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
        let data = new FormData();&lt;br /&gt;
        data.append('nombre', 'John');&lt;br /&gt;
        data.append('apellido', 'Die');&lt;br /&gt;
        axios.post('data.php', data)&lt;br /&gt;
              .then(function (response) {&lt;br /&gt;
                console.log(response);&lt;br /&gt;
            }).catch(function (error) {&lt;br /&gt;
                console.log(error);&lt;br /&gt;
            });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''VIDEOTUTORIAL'''&lt;br /&gt;
&lt;br /&gt;
https://youtu.be/-Fl11UJmYSQ&lt;br /&gt;
&lt;br /&gt;
https://www.hoclabs.com/2017/05/30/axios-promesas-y-http/&lt;br /&gt;
&lt;br /&gt;
===ASYNC AWAIT===&lt;br /&gt;
&lt;br /&gt;
https://codingpotions.com/vue-axios#async--await-para-las-llamadas&lt;br /&gt;
&lt;br /&gt;
https://blog.nexlab.dev/tech/2018/08/31/que-es-async-await-en-javascript.html&lt;br /&gt;
&lt;br /&gt;
https://www.oscarblancarteblog.com/2019/03/15/javascript-async-await/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=stiPdlSkTOI&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb XMLHttpRequest==&lt;br /&gt;
&lt;br /&gt;
Per a cada exercici es proporciona els programa PHP de servidor necessari.&lt;br /&gt;
&lt;br /&gt;
=== Exercici 1 ===&lt;br /&gt;
&lt;br /&gt;
Crea una petició amb AJAX per tal de conèixer els paràmetres de configuració del php. Et recordo que per obtenir-los només cal executar la funció de php anomenada  phpinfo();&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici1.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
phpinfo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--:[[solució exercici1-Ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 2 ===&lt;br /&gt;
&lt;br /&gt;
Realitzar un exercici que mostri per pantalla en quin estat de petició està (1 al 4) per pantalla, per a això s'haurà d'afegir en un fitxer anomenat espera a php o jsp amb una pausa de tres segons i quan acabi haurà de mostrar el temps abans i després d'aquest temps.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici2.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
sleep(3);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!-- :[[solució exercici espera]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 3 ===&lt;br /&gt;
Crea dos camps (nom i cognom). Envia la informació mitjançant AJAX al servidor PHP i fes que et retorni els valors passats a majúscules. Insereix directament amb HTML la informació a un DIV a la pàgina &lt;br /&gt;
&lt;br /&gt;
Fitxer exercici3.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom=$_REQUEST[&amp;quot;nom&amp;quot;];&lt;br /&gt;
$cognom=$_REQUEST[&amp;quot;cognom&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
echo strtoupper($nom).&amp;quot;,&amp;quot;.strtoupper($cognom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici2-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 4 ===&lt;br /&gt;
Desplegables encadenats. Es vol crear 2 desplegables en HTML que la seva informació la obtingui del servidor mitjançant AJAX. &lt;br /&gt;
El primer Desplegable ha de contenir les següents ciutats: Barcelona, Madrid, Sevilla, LaCoruña.&lt;br /&gt;
El segon desplegable mostrarà els Barris de la Ciutat escollida al primer desplegable.&lt;br /&gt;
&lt;br /&gt;
Fitxer exercici4.php:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$barri = array(&amp;quot;barcelona&amp;quot;=&amp;gt;array(&amp;quot;Ciutat Vella&amp;quot;, &amp;quot;Eixample&amp;quot;, &amp;quot;Sants-Montuïc&amp;quot;,&amp;quot;Les Corts&amp;quot;,&amp;quot;Gràcia&amp;quot;),&lt;br /&gt;
                &amp;quot;madrid&amp;quot;=&amp;gt;array(&amp;quot;Centro&amp;quot;,&amp;quot;Arganzuela&amp;quot;,&amp;quot;Retiro&amp;quot;,&amp;quot;Salamanca&amp;quot;,&amp;quot;Chamartín&amp;quot;,&amp;quot;Tetuán&amp;quot;),&lt;br /&gt;
                &amp;quot;sevilla&amp;quot; =&amp;gt; array(&amp;quot;Casco antiguo&amp;quot;,&amp;quot;Nervión&amp;quot;,&amp;quot;Sur&amp;quot;,&amp;quot;Triana&amp;quot;,&amp;quot;Norte&amp;quot;),&lt;br /&gt;
                &amp;quot;lacoruna&amp;quot; =&amp;gt; array(&amp;quot;Agra del Orzán&amp;quot;,&amp;quot;Ensanche&amp;quot;,&amp;quot;Monte Alto&amp;quot;,&amp;quot;Pescadería&amp;quot;)&lt;br /&gt;
                );&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
echo &amp;quot;---------,&amp;quot;.implode(&amp;quot;,&amp;quot;,$barri[$q]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici4.php?q=barcelona&lt;br /&gt;
:retorna: ---------,Ciutat Vella,Eixample,Sants-Montuïc,Les Corts,Gràcia&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--:[[solució exercici3-ajax]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici 5 ===&lt;br /&gt;
*a)Crea un formulari que demani nom d'usuari i contrasenya. Crea un botó de validació que validi amb AJAX que l'usuari introduït no existeixi. Si existeix s'ha de proposar un nom alternatiu. Com no utilitzarem BD crea un fitxer on a cada linia hi hagi un nom d'usuari. El nou nom d'usuari no ha de coincidir amb cap dels noms que apareix a la llista.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &amp;lt;!--:[[solució exercici-nom]]--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*b)Crea un Botó anomenat enviar que mitjançant AJAX envii el nom d'usuari i la contrasenya al servidor. El nom d'usuari s'ha d'afegir al fitxer anterior.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
  &amp;lt;!--:[[solució exercici4-ajax]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici 6 ===&lt;br /&gt;
&lt;br /&gt;
Es tracta de crear un input que s'introduiran noms i mitjançant ajax consultar la base de dades si hi ha el nom en cas d'existir ha de mostrar tots els noms que comencen amb les lletres introduïdes&lt;br /&gt;
&amp;lt;!--:[[solució exercici6-ajax]]--&amp;gt;&lt;br /&gt;
Fitxer exercici6.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Array with names&lt;br /&gt;
$a = array(&amp;quot;Anna&amp;quot;,&amp;quot;Brittany&amp;quot;,&amp;quot;Cinderella&amp;quot;,&amp;quot;Diana&amp;quot;,&amp;quot;Eva&amp;quot;,&amp;quot;Fiona&amp;quot;,&amp;quot;Gunda&amp;quot;,&amp;quot;Hege&amp;quot;,&amp;quot;Inga&amp;quot;,&amp;quot;Johanna&amp;quot;,&amp;quot;Kitty&amp;quot;,&amp;quot;Linda&amp;quot;,&amp;quot;Nina&amp;quot;,&amp;quot;Ophelia&amp;quot;,&amp;quot;Petunia&amp;quot;,&amp;quot;Amanda&amp;quot;,&amp;quot;Raquel&amp;quot;,&amp;quot;Cindy&amp;quot;,&amp;quot;Doris&amp;quot;,&amp;quot;Eve&amp;quot;,&amp;quot;Evita&amp;quot;,&amp;quot;Sunniva&amp;quot;,&amp;quot;Tove&amp;quot;,&amp;quot;Unni&amp;quot;,&amp;quot;Violet&amp;quot;,&amp;quot;Liza&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Ellen&amp;quot;,&amp;quot;Wenche&amp;quot;,&amp;quot;Vicky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// get the q parameter from URL&lt;br /&gt;
$q = $_REQUEST[&amp;quot;q&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
$hint = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// lookup all hints from array if $q is different from &amp;quot;&amp;quot;&lt;br /&gt;
if ($q !== &amp;quot;&amp;quot;) {&lt;br /&gt;
  $q = strtolower($q);&lt;br /&gt;
  $len=strlen($q);&lt;br /&gt;
  foreach($a as $name) {&lt;br /&gt;
    if (stristr($q, substr($name, 0, $len))) {&lt;br /&gt;
      if ($hint === &amp;quot;&amp;quot;) {&lt;br /&gt;
        $hint = $name;&lt;br /&gt;
      } else {&lt;br /&gt;
        $hint .= &amp;quot;&amp;lt;br&amp;gt;$name&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Output &amp;quot;no suggestion&amp;quot; if no hint was found or output correct values&lt;br /&gt;
echo $hint === &amp;quot;&amp;quot; ? &amp;quot;no suggestion&amp;quot; : $hint;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:si es crida: http://URL-servidor/exercici6.php?q=e&lt;br /&gt;
:retorna: &amp;lt;source&amp;gt;Eva&amp;lt;br&amp;gt;Eve&amp;lt;br&amp;gt;Evita&amp;lt;br&amp;gt;Elizabeth&amp;lt;br&amp;gt;Ellen&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Per realitzar aquest exercicis es necessita una màquina virtual amb els programes apache i php5 instalats.&lt;br /&gt;
https://uf.ctrl-alt-d.net/material/mostra/236/ajax-i-jquery-prediccions-metereologiques&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Axios==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Axios&lt;br /&gt;
&lt;br /&gt;
== Exercicis amb Fetch==&lt;br /&gt;
* Torna a fer els exercicis 4 i 6 usant la llibreria Fetch&lt;br /&gt;
&lt;br /&gt;
== Solucions ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_4&lt;br /&gt;
&lt;br /&gt;
http://wikiserver.infomerce.es/index.php/Exercici_6&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API que usen AJAX ==&lt;br /&gt;
&lt;br /&gt;
https://www.svnlabs.com/blogs/php-spotify-web-api/&lt;br /&gt;
&lt;br /&gt;
https://developer.spotify.com/dashboard/&lt;br /&gt;
&lt;br /&gt;
https://rapidapi.com/categories&lt;br /&gt;
&lt;br /&gt;
= Referències =&lt;br /&gt;
*http://www.w3schools.com/ajax/default.ASP&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started&lt;br /&gt;
*http://www.xul.fr/en-xml-ajax.html&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Dace Crane, Bear Bibeault, Jord Sonneveld,&amp;quot;Ajax in Practice&amp;quot;, Ed. Manning, 2007, ISBN 1-932394-99-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Christian Heilmann, &amp;quot;Beginning JavaScript with DOM Scripting and Ajax&amp;quot;, Ed. Apress, 2006, ISBN 1-59059-680-3 &amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17908</id>
		<title>M6 - Desenvolupament web en entorn client</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17908"/>
				<updated>2024-03-20T16:01:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* UF4. Comunicació asíncrona client-servidor. (40h) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== UF1 : Sintaxis del llenguatge. Objectes predefinits del llenguatge (33h) ==&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Arquitectures i tecnologies de la programació Web en entorn client]] ===&lt;br /&gt;
=== [[NF2 - Sintaxi Javascript]] ===&lt;br /&gt;
=== [[NF3 - Objectes predefinits del llenguatge Javascript]] ===&lt;br /&gt;
&lt;br /&gt;
== UF2 : Estructures definides pel programador. Objectes (30h) ==&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Funcions]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Objectes]] ===&lt;br /&gt;
&lt;br /&gt;
== UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h)  ==&lt;br /&gt;
=== [[NF1 - Esdeveniments i Validacio de formularis]] ===&lt;br /&gt;
=== [[NF2 - Model d'objectes del document]] ===&lt;br /&gt;
=== [[JQUERY]] ===&lt;br /&gt;
=== [[VUEJS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Això estava comentat&lt;br /&gt;
=== [[NF3 - JQUERY]] === &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UF4. Comunicació asíncrona client-servidor. (40h) ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''NF1'''&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== [[NF1 - AJAX]] ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[NF1 - WEBSOCKETS]] ===&lt;br /&gt;
&lt;br /&gt;
'''NF2'''&lt;br /&gt;
=== [[JQUERY - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
[https://jqueryui.com/ JQueryUI]&lt;br /&gt;
&lt;br /&gt;
'''NF3'''&lt;br /&gt;
&lt;br /&gt;
=== [[NF3 - XML i JSON]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === [[NF2 - JQUERY-AJAX]]=== Això estava comentat--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[VUEJS - AJAX]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISCEL·LÀNIA ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://shopify.github.io/draggable/&lt;br /&gt;
https://haltu.github.io/muuri/&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17907</id>
		<title>M6 - Desenvolupament web en entorn client</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17907"/>
				<updated>2024-03-20T16:01:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* UF4. Comunicació asíncrona client-servidor. (40h) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== UF1 : Sintaxis del llenguatge. Objectes predefinits del llenguatge (33h) ==&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Arquitectures i tecnologies de la programació Web en entorn client]] ===&lt;br /&gt;
=== [[NF2 - Sintaxi Javascript]] ===&lt;br /&gt;
=== [[NF3 - Objectes predefinits del llenguatge Javascript]] ===&lt;br /&gt;
&lt;br /&gt;
== UF2 : Estructures definides pel programador. Objectes (30h) ==&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Funcions]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Objectes]] ===&lt;br /&gt;
&lt;br /&gt;
== UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h)  ==&lt;br /&gt;
=== [[NF1 - Esdeveniments i Validacio de formularis]] ===&lt;br /&gt;
=== [[NF2 - Model d'objectes del document]] ===&lt;br /&gt;
=== [[JQUERY]] ===&lt;br /&gt;
=== [[VUEJS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Això estava comentat&lt;br /&gt;
=== [[NF3 - JQUERY]] === &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UF4. Comunicació asíncrona client-servidor. (40h) ==&lt;br /&gt;
&lt;br /&gt;
'''NF1'''&lt;br /&gt;
=== [[NF1 - AJAX]] ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[NF1 - WEBSOCKETS]] ===&lt;br /&gt;
&lt;br /&gt;
'''NF2'''&lt;br /&gt;
=== [[JQUERY - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
[https://jqueryui.com/ JQueryUI]&lt;br /&gt;
&lt;br /&gt;
'''NF3'''&lt;br /&gt;
&lt;br /&gt;
=== [[NF3 - XML i JSON]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === [[NF2 - JQUERY-AJAX]]=== Això estava comentat--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[VUEJS - AJAX]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISCEL·LÀNIA ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://shopify.github.io/draggable/&lt;br /&gt;
https://haltu.github.io/muuri/&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17906</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17906"/>
				<updated>2024-03-15T18:34:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17905</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17905"/>
				<updated>2024-03-15T18:11:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17904</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17904"/>
				<updated>2024-03-15T18:07:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17903</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17903"/>
				<updated>2024-03-15T18:06:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17902</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17902"/>
				<updated>2024-03-15T18:04:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17901</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17901"/>
				<updated>2024-03-15T18:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;    &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt; &lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17900</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17900"/>
				<updated>2024-03-15T17:59:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;   &amp;lt;!--  &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;  --&amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17899</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17899"/>
				<updated>2024-03-15T17:58:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;   &amp;lt;!--  &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;  --&amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17898</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17898"/>
				<updated>2024-03-15T17:35:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;   &amp;lt;!--  &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;  --&amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17897</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17897"/>
				<updated>2024-03-15T16:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''methods'''&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17896</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17896"/>
				<updated>2024-03-15T16:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
''' methods '''&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17895</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17895"/>
				<updated>2024-03-15T15:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17894</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17894"/>
				<updated>2024-03-15T15:29:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17893</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17893"/>
				<updated>2024-03-15T15:27:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17892</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17892"/>
				<updated>2024-03-15T15:26:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo password y mostrar un mensaje en caso de que sean iguales&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Crear un array en data con los días de la semana y generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17886</id>
		<title>M6 - Desenvolupament web en entorn client</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=M6_-_Desenvolupament_web_en_entorn_client&amp;diff=17886"/>
				<updated>2024-03-13T15:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== UF1 : Sintaxis del llenguatge. Objectes predefinits del llenguatge (33h) ==&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Arquitectures i tecnologies de la programació Web en entorn client]] ===&lt;br /&gt;
=== [[NF2 - Sintaxi Javascript]] ===&lt;br /&gt;
=== [[NF3 - Objectes predefinits del llenguatge Javascript]] ===&lt;br /&gt;
&lt;br /&gt;
== UF2 : Estructures definides pel programador. Objectes (30h) ==&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Funcions]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[NF1 - Estructures definides pel Programador - Objectes]] ===&lt;br /&gt;
&lt;br /&gt;
== UF3. Esdeveniments. Manegament de formularis. Model d'objectes del document. (62h)  ==&lt;br /&gt;
=== [[NF1 - Esdeveniments i Validacio de formularis]] ===&lt;br /&gt;
=== [[NF2 - Model d'objectes del document]] ===&lt;br /&gt;
=== [[JQUERY]] ===&lt;br /&gt;
=== [[VUEJS]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Això estava comentat&lt;br /&gt;
=== [[NF3 - JQUERY]] === &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UF4. Comunicació asíncrona client-servidor. (40h) ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''NF1'''&lt;br /&gt;
=== [[NF1 - AJAX]] ===&lt;br /&gt;
=== [[NF1 - WEBSOCKETS]] ===&lt;br /&gt;
&lt;br /&gt;
'''NF2'''&lt;br /&gt;
=== [[JQUERY - AJAX]] ===&lt;br /&gt;
&lt;br /&gt;
[https://jqueryui.com/ JQueryUI]&lt;br /&gt;
&lt;br /&gt;
'''NF3'''&lt;br /&gt;
&lt;br /&gt;
=== [[NF3 - XML i JSON]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === [[NF2 - JQUERY-AJAX]]=== Això estava comentat--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== [[VUEJS - AJAX]] ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISCEL·LÀNIA ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://shopify.github.io/draggable/&lt;br /&gt;
https://haltu.github.io/muuri/&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17870</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17870"/>
				<updated>2024-03-08T17:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* DIRECTIVA V-BIND */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- &amp;lt;button  @click=&amp;quot;incrementVote(storie)&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt; --&amp;gt;&lt;br /&gt;
                    &amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Tenemos dos inputs de tipo passwords y muestre un mensaje en caso que sean iguales&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un array en data con los días de la semana, se trata de generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17869</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17869"/>
				<updated>2024-03-08T16:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* V-TEXT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Tenemos dos inputs de tipo passwords y muestre un mensaje en caso que sean iguales&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un array en data con los días de la semana, se trata de generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17868</id>
		<title>VUEJS</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=VUEJS&amp;diff=17868"/>
				<updated>2024-03-08T16:41:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* V-TEXT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:vueimagen.png]]&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=ub8ZU3JxNsM&amp;amp;list=PL7VXpoQP1k247QUTTxHcYBNyCg1j2ALfD&lt;br /&gt;
&lt;br /&gt;
v-text: para mostrar texto y que no parpadee&lt;br /&gt;
&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===V-TEXT===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt; {{mensaje}}&amp;lt;/h1&amp;gt;    &amp;lt;!--podemos ver --&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;  //CDN&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
     var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;   //datos, hace referencia dentro de elemento #el {{mensaje}} &lt;br /&gt;
        })&lt;br /&gt;
    }).mount(#el) //hace referencia al elemento id= el&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--muestra &amp;quot;Hola&amp;quot; y luego en función del texto del input va rellenando--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount('#el');&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-SHOW===&lt;br /&gt;
v-show: para mostrar u ocultar el elemento en función de su valor. v-show=&amp;quot;true&amp;quot; es igual v-show=&amp;quot;mensaje&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Ejemplo &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; {{mensaje}}&amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;  &amp;lt;!--al recargar la pagina, se puede ver {{mensaje}} para evitar esto se usa la directiva v-text--&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-show=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;   &amp;lt;!--si el mensaje es mayor que 2 muestra en caso contrario hace un display:none en css--&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-IF===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-if=&amp;quot;mensaje.length &amp;gt; 2&amp;quot;&amp;gt;Hola &amp;lt;span v-text=&amp;quot;mensaje&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/h1&amp;gt;    &amp;lt;!--en vez de v-show podemos usar v-if--&amp;gt;&lt;br /&gt;
    &amp;lt;h1 v-else&amp;gt;otra&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; class=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      mensaje: &amp;quot;resultado&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===V-FOR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [      //utilizamos un array con cadenas&lt;br /&gt;
                &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                &amp;quot;Alex Salinas&amp;quot;&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recorriendo Objetos &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt; --&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot; v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({    //utilizamos un array con objetos&lt;br /&gt;
            profesores: [   &lt;br /&gt;
                {nombre:&amp;quot;Julio Noguera&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Albert Canela&amp;quot;},&lt;br /&gt;
                {nombre: &amp;quot;Alex Salinas&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos especificar recorrer los objetos y mostrar o acceder a su contenido&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!-- &amp;lt;li v-text=&amp;quot;profesores[0]&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//en Consola del navegador-&amp;gt;&lt;br /&gt;
// variable.profesores[0].nombre =&amp;quot;Pepe&amp;quot;&lt;br /&gt;
// variable.profesores.push({nombre:&amp;quot;Joan Comas&amp;quot;,activo:true})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EVENTOS y FUNCIONES ===&lt;br /&gt;
&lt;br /&gt;
===CLICK===&lt;br /&gt;
&lt;br /&gt;
Tenemos los datos mensajes y el array de profesores, también el método invertir que se ejecutará cuando se haga click en botón, también es interesante que para acceder a los datos se utiliza this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;mensaje&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1 v-text=&amp;quot;mensaje&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;button @click=&amp;quot;mensaje=mensaje.split('').reverse('').join('')&amp;quot;&amp;gt;BOTON&amp;lt;/button&amp;gt; --&amp;gt; &lt;br /&gt;
        &amp;lt;!-- @click es abreviación de v-on:click --&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;invertir&amp;quot;&amp;gt;INVERTIR&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            mensaje: &amp;quot;&amp;quot;,&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            invertir() {&lt;br /&gt;
                this.mensaje = this.mensaje.split('').reverse().join('');&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mostrar lista asociando evento click&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.false{background:blue}&lt;br /&gt;
.true{background: green}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li v-for=&amp;quot;profe in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span v-text=&amp;quot;profe.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=false&amp;quot; v-if=&amp;quot;profe.activo&amp;quot; class=&amp;quot;false&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span @click=&amp;quot;profe.activo=true&amp;quot; v-else class=&amp;quot;true&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    activo: true&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    activo: false&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BOTÓN- AÑADIR LISTA'''&lt;br /&gt;
&lt;br /&gt;
===KEYUP===&lt;br /&gt;
&lt;br /&gt;
Eventos de teclado&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li v-for=&amp;quot;profesor in profesores&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span v-text=&amp;quot;profesor.nombre&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;small v-if=&amp;quot;profesor.activo&amp;quot;&amp;gt;-Activo&amp;lt;/small&amp;gt;&lt;br /&gt;
                &amp;lt;small v-else&amp;gt;-NO está&amp;lt;/small&amp;gt;&lt;br /&gt;
            &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;input v-on:keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- &amp;lt;input @keyup.enter=&amp;quot;anadir&amp;quot; type=&amp;quot;text&amp;quot; v-model=&amp;quot;profe&amp;quot; &amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data:() =&amp;gt; ({&lt;br /&gt;
              profe: &amp;quot;&amp;quot;,&lt;br /&gt;
                profesores: [&lt;br /&gt;
                  { nombre: &amp;quot;Julio Noguera&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Albert Canela&amp;quot;, activo: true },&lt;br /&gt;
                  { nombre: &amp;quot;Alex Salinas&amp;quot;, activo: false }&lt;br /&gt;
                ]&lt;br /&gt;
            }),&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.profesores.push({&lt;br /&gt;
                        nombre: this.profe,&lt;br /&gt;
                        activo: false&lt;br /&gt;
                    });&lt;br /&gt;
                    this.profe = &amp;quot;&amp;quot;; // Restableix el valor de profe a una cadena buida després d'afegir-lo&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVA V-BIND=== &lt;br /&gt;
&lt;br /&gt;
'''PARA ACTIVAR CLASES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    .rojo {&lt;br /&gt;
        background: red;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    .verde {&lt;br /&gt;
        background: green;&lt;br /&gt;
    }&lt;br /&gt;
    .glyphicon{&lt;br /&gt;
        color: white;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;!--//en el caso de querer añadir varias clases--&amp;gt;&lt;br /&gt;
            &amp;lt;!-- v-bind:class=&amp;quot;['glyphicon',tarea.completo ? 'verde': 'rojo']&amp;quot; --&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;tarea in tareas&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;span v-bind:class=&amp;quot;{  &lt;br /&gt;
                               'rojo': !tarea.completo,&lt;br /&gt;
                               'verde': tarea.completo&lt;br /&gt;
                                }&amp;quot; v-text=&amp;quot;tarea.nombre&amp;quot; @click=&amp;quot;tarea.completo=!tarea.completo&amp;quot; &amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;input type=&amp;quot;checkbox&amp;quot;  v-model=&amp;quot;tarea.completo&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;pre&amp;gt;&lt;br /&gt;
            {{$data}}&lt;br /&gt;
          &amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var variable = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          tareas: [&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Estudiar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Repasar&amp;quot;,&lt;br /&gt;
                completo: true&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                nombre: &amp;quot;Examinar&amp;quot;,&lt;br /&gt;
                completo: false&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
      })&lt;br /&gt;
  }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''INCREMENTAR''' &lt;br /&gt;
&lt;br /&gt;
Como se puede ver, se produce un incremento de voto modificando su atributo directamente. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;veamos&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
              &amp;lt;li v-for=&amp;quot;storie in stories&amp;quot;&amp;gt;&amp;lt;button  @click=&amp;quot;storie.votos++&amp;quot;&amp;gt;Vote {{storie.politico}}&amp;lt;/button&amp;gt;&amp;lt;pre v-text=&amp;quot;storie.votos&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;pre&amp;gt;{{$data}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  const app = Vue.createApp({&lt;br /&gt;
    data() {&lt;br /&gt;
      return {&lt;br /&gt;
        stories: [&lt;br /&gt;
          { politico: &amp;quot;julio&amp;quot;, votos: 1 },&lt;br /&gt;
          { politico: &amp;quot;paco&amp;quot;, votos: 2 },&lt;br /&gt;
          { politico: &amp;quot;raúl&amp;quot;, votos: 3 },&lt;br /&gt;
          { politico: &amp;quot;jorge&amp;quot;, votos: 4 }&lt;br /&gt;
        ]&lt;br /&gt;
      };&lt;br /&gt;
    },&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementVote(storie) {&lt;br /&gt;
        storie.votos++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }).mount(&amp;quot;.container&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FILTRAR ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;range&amp;quot; v-model=&amp;quot;minimo&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;50&amp;quot;&amp;gt;  &lt;br /&gt;
    &amp;lt;div v-text=&amp;quot;minimo&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in filtrar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;input type=&amp;quot;search&amp;quot; v-model=&amp;quot;campo&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;dato in busqueda&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div v-text=&amp;quot;dato.descripcion&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
        minimo: &amp;quot;5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        campo: &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        datos: [{&lt;br /&gt;
          codigo: 1,&lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 2,&lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        }, {&lt;br /&gt;
          codigo: 3,&lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        filtrar() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.precio &amp;gt; this.minimo);&lt;br /&gt;
        },&lt;br /&gt;
        busqueda() {&lt;br /&gt;
          return this.datos.filter((dato) =&amp;gt; dato.descripcion.includes(this.campo));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Componentes==&lt;br /&gt;
&lt;br /&gt;
1. Crear una nueva instancia de Vue con Vue.createApp&lt;br /&gt;
&lt;br /&gt;
2. Existen 3 Objetos básicos y fundamentales que estarán en la mayoria de las aplicaciones web: el data y methods.&lt;br /&gt;
&lt;br /&gt;
3. Se debe crear un contenedor con un id igual al del objeto el para establecer el alcance del framework&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Crear Nuestro primer Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- vue está disponible en todo este div--&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//nueva instacia de Vue : Vue.createApp&lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data:() =&amp;gt; ({ //capa de datos&lt;br /&gt;
&lt;br /&gt;
    }),&lt;br /&gt;
    methods:&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    app.component('hola-mundo', {    //debe coincidir con el nombre del componente(etiqueta html)&lt;br /&gt;
    template: `&amp;lt;p&amp;gt;&lt;br /&gt;
                 Hola mundo&lt;br /&gt;
              &amp;lt;/p&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
    &lt;br /&gt;
    app.mount('#aplicacion')  // el elemento donde se aplicará Vue, en este caso un div con id = main);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PROPS'''&lt;br /&gt;
&lt;br /&gt;
Props sirve para interpolar o pasar los valores que hayan dentro del atributo la etiqueta html (inglés, castellano) al objeto component&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;ingles&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
    &amp;lt;hola-mundo idioma=&amp;quot;castellano&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otro Componente Básico&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Juan&amp;quot; apellido=&amp;quot;Perez&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
 &amp;lt;ejemplo nombre=&amp;quot;Alejandra&amp;quot; apellido=&amp;quot;Quiroga&amp;quot;&amp;gt;&amp;lt;/ejemplo&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  app.component('ejemplo', {&lt;br /&gt;
   props: ['nombre', 'apellido'],&lt;br /&gt;
   template: '&amp;lt;p&amp;gt; Hola {{nombre}} {{apellido}} &amp;lt;/p&amp;gt;' &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount(&amp;quot;#app&amp;quot;)&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Componente, podemos ver que pasamos una peliculas &amp;quot;peliculon 1917&amp;quot; y una imagen en la etiqueta peliculas, que serán los valores que recibirá el componente para luego incluirlo en la plantilla.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;peliculas titulo=&amp;quot;peliculon 1917&amp;quot;&lt;br /&gt;
      imagen=&amp;quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSexz8IyOhoxR2ibVc78RHzpBCsvhDt3fx0wl99Qcxacht4gk9z&amp;quot;&amp;gt;&amp;lt;/peliculas&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  &lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  app.component('peliculas', {&lt;br /&gt;
&lt;br /&gt;
    props: ['imagen', 'titulo'],  //los props reciben los datos externos del html en este caso será &amp;quot;peliculon 1917&amp;quot; y la ruta de la imagen&lt;br /&gt;
    template: &lt;br /&gt;
      `&amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;img width=&amp;quot;100px&amp;quot; v-bind:src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;  &amp;lt;!-- v-bind:alt se reduce en :alt , al ser un atributo no se puede usar {{}} sino v-bind--&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt; {{titulo}} &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
  app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este ejemplo, viene a basarse en el ejemplo anterior pero además coje datos del JSON data y los va mostrando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div v-for=&amp;quot;(dato, index) in datos&amp;quot;&amp;gt;   &amp;lt;!-- Corregido --&amp;gt;&lt;br /&gt;
      &amp;lt;peliculas :key=&amp;quot;index&amp;quot; :titulo=&amp;quot;dato.titulo&amp;quot; :imagen=&amp;quot;dato.imagen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/peliculas&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
          datos: [{&lt;br /&gt;
              titulo: &amp;quot;star wars&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://vignette.wikia.nocookie.net/cine/images/8/88/Sw1.jpg/revision/latest?cb=20120930202439 &amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Sonic&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://www.smashbros.com/wiiu-3ds/images/character/sonic/main.png&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
              titulo: &amp;quot;Mario bros&amp;quot;,&lt;br /&gt;
              imagen: &amp;quot;https://imagenesparapeques.com/wp-content/uploads/2021/05/Mario-Bros-png-transparente.png&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
&lt;br /&gt;
        })&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    app.component('peliculas', {&lt;br /&gt;
     props: ['titulo', 'imagen'],&lt;br /&gt;
      template: `&amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;img width=&amp;quot;100px&amp;quot; :src=&amp;quot;imagen&amp;quot; :alt=&amp;quot;titulo&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;{{ titulo }}&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;`&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
		app.mount(&amp;quot;.container&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;el&amp;quot; class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt; Helados &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Lista &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in helados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;component-helado v-bind:helado=&amp;quot;item&amp;quot;&amp;gt;&amp;lt;/component-helado&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt; Seleccionados &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;item in heladosSeleccionados&amp;quot; :key=&amp;quot;item.sabor&amp;quot;&amp;gt; {{ item.sabor }} &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({&lt;br /&gt;
        helados: [{&lt;br /&gt;
            sabor: 'Chocolate',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Dulce de leche',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Frutilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Limón',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            sabor: 'Vainilla',&lt;br /&gt;
            seleccionado: false&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }),&lt;br /&gt;
      computed: {&lt;br /&gt;
        heladosSeleccionados() {&lt;br /&gt;
          return this.helados.filter(helado =&amp;gt; helado.seleccionado);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.component('component-helado', {&lt;br /&gt;
      props: ['helado'],&lt;br /&gt;
      template: `&lt;br /&gt;
        &amp;lt;div&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-success&amp;quot; v-on:click=&amp;quot;agregar(helado)&amp;quot; v-if=&amp;quot;!helado.seleccionado&amp;quot;&amp;gt; + &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;button class=&amp;quot;btn btn-danger&amp;quot; v-on:click=&amp;quot;eliminar(helado)&amp;quot; v-if=&amp;quot;helado.seleccionado&amp;quot;&amp;gt; - &amp;lt;/button&amp;gt; &lt;br /&gt;
          &amp;lt;span&amp;gt; {{ helado.sabor }} &amp;lt;/span&amp;gt; &lt;br /&gt;
          &amp;lt;hr/&amp;gt;  &lt;br /&gt;
        &amp;lt;/div&amp;gt;  `,&lt;br /&gt;
      methods: {&lt;br /&gt;
        agregar(helado) {&lt;br /&gt;
          helado.seleccionado = true;&lt;br /&gt;
        },&lt;br /&gt;
        eliminar(helado) {&lt;br /&gt;
          helado.seleccionado = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    app.mount('#el');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ejercicios ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
'''v-if, v-else, v-else-if, v-show'''&lt;br /&gt;
&lt;br /&gt;
Tenemos dos inputs de tipo passwords y muestre un mensaje en caso que sean iguales&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Repita la clave:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;password&amp;quot; v-model=&amp;quot;clave2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;  &lt;br /&gt;
    &amp;lt;p v-if=&amp;quot;clave1===clave2&amp;quot;&amp;gt;Las claves son iguales.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p v-else&amp;gt;Las claves son distintas.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app = Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        clave1 : '',&lt;br /&gt;
        clave2 : ''&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un array en data con los días de la semana, se trata de generar una tabla de 1 columna y 7 filas en HTML&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;dia in dias&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{{dia}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        dias: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''v-for con array de objetos literales'''&lt;br /&gt;
&lt;br /&gt;
Definir un array con objetos que almacenan los nombres y edades de 6 personas. Mostrar en una lista ordenada el nombre de cada persona y entre paréntesis si es mayor o no de edad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
personas: [{&lt;br /&gt;
                    nombre: 'Julio', &lt;br /&gt;
                    edad: 32&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Albert', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Alex', &lt;br /&gt;
                    edad: 35&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ramón', &lt;br /&gt;
                    edad: 50&lt;br /&gt;
                   }]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;template v-for=&amp;quot;persona in personas&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;&lt;br /&gt;
          {{persona.nombre}}&lt;br /&gt;
          &amp;lt;span v-if=&amp;quot;persona.edad&amp;gt;=18&amp;quot;&amp;gt;(Mayor)&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span v-else&amp;gt;(Menor)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/template&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data:() =&amp;gt; ({ &lt;br /&gt;
        personas: [{&lt;br /&gt;
                    nombre: 'Jose', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Ana', &lt;br /&gt;
                    edad: 43&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'Pedro', &lt;br /&gt;
                    edad: 4&lt;br /&gt;
                   },{&lt;br /&gt;
                    nombre: 'María', &lt;br /&gt;
                    edad: 12&lt;br /&gt;
                   }]&lt;br /&gt;
&lt;br /&gt;
      })&lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ejercicios===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de profesores, donde se pueda insertar un nuevo profesor e incrementar la edad de cada uno de ellos. Cada profesor nuevo empezará con 0 años.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;profesor in profesores&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;profesor.nombre&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div v-text=&amp;quot;profesor.edad&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;button @click=&amp;quot;incrementar(profesor)&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;profesor&amp;quot;&amp;gt;&amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;Añadir&amp;lt;/button&amp;gt;&lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var variable = Vue.createApp({&lt;br /&gt;
        data: () =&amp;gt; ({&lt;br /&gt;
&lt;br /&gt;
            profesor: &amp;quot; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
            profesores: [{&lt;br /&gt;
                    nombre: &amp;quot;Julio Noguera&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;0&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Albert Canela&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;1&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    nombre: &amp;quot;Alex Salinas&amp;quot;,&lt;br /&gt;
                    edad: &amp;quot;2&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
            anadir: function(){&lt;br /&gt;
                this.profesores.push({nombre: this.profesor, edad: 0});&lt;br /&gt;
                console.log(this.profesor);&lt;br /&gt;
            },&lt;br /&gt;
            incrementar: function(profe){&lt;br /&gt;
                console.log(profe.edad++);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }).mount(&amp;quot;#el&amp;quot;);&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos :click'''&lt;br /&gt;
&lt;br /&gt;
Crear dos inputs de tipo input(number) y un botón. Cuando se presione dicho botón mostrar la suma de los valores ingresados (usar método)&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese segundo valor:&lt;br /&gt;
      &amp;lt;input type=&amp;quot;number&amp;quot; v-model=&amp;quot;valor2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Ingrese primer valor:&lt;br /&gt;
      &amp;lt;button v-on:click=&amp;quot;sumarValores&amp;quot;&amp;gt;Sumar&amp;lt;/button&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;El resultado de la suma es igual a {{suma}}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;   &lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        valor1: 0,&lt;br /&gt;
        valor2: 0,&lt;br /&gt;
        suma: ''&lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        sumarValores: function() {&lt;br /&gt;
          this.suma = parseInt(this.valor1) + parseInt(this.valor2);&lt;br /&gt;
        }&lt;br /&gt;
      }      &lt;br /&gt;
    }).mount(&amp;quot;#aplicacion&amp;quot;)&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ejercicio===&lt;br /&gt;
&lt;br /&gt;
Se desea mostrar una lista de tareas, se pide que se pueda eliminar el item seleccionado.&lt;br /&gt;
&lt;br /&gt;
'''Solución''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;el&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div v-for=&amp;quot;tarea in tareas&amp;quot; &amp;gt;     &amp;lt;div v-for=&amp;quot;(item, index) in tareas&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;div v-text=&amp;quot;tarea&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &amp;lt;span @click=&amp;quot;eliminar(tarea)&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;tarea&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;button @click=&amp;quot;anadir&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;br&amp;gt;&lt;br /&gt;
        {{$data}}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        var variable = Vue.createApp({&lt;br /&gt;
            data() {&lt;br /&gt;
                return {&lt;br /&gt;
                    tarea: &amp;quot;&amp;quot;,&lt;br /&gt;
                    tareas: []&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            methods: {&lt;br /&gt;
                anadir() {&lt;br /&gt;
                    this.tareas.push(this.tarea);&lt;br /&gt;
                    console.log(this.tareas);&lt;br /&gt;
                },&lt;br /&gt;
                eliminar(tarea) {&lt;br /&gt;
                    let index = this.tareas.indexOf(tarea);&lt;br /&gt;
                    if (index !== -1) {&lt;br /&gt;
                        this.tareas.splice(index, 1);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }).mount('#el');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Eventos: v-on:keypress, v-on:keyup'''&lt;br /&gt;
&lt;br /&gt;
Tenemos un input de tipo text que introducimos un texto, a medida que vayamos escribiendo texto deberá ir mostrando la cantidad de 'a' y 'A' que hay&lt;br /&gt;
&lt;br /&gt;
'''solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Ingrese una frase:&lt;br /&gt;
        &amp;lt;input v-model=&amp;quot;frase&amp;quot; v-on:keyup=&amp;quot;contabilizarLetrasA&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;80&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Cantidad de letras 'a o 'A'':{{cantidadLetrasa}}&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      var app = Vue.createApp({&lt;br /&gt;
        data:() =&amp;gt; ({ &lt;br /&gt;
          cantidadLetrasa: 0,&lt;br /&gt;
          frase: ''&lt;br /&gt;
        }),&lt;br /&gt;
        methods: {&lt;br /&gt;
          contabilizarLetrasA:  function() {&lt;br /&gt;
            var cant=0;&lt;br /&gt;
            for(var f=0; f&amp;lt;this.frase.length; f++)&lt;br /&gt;
              if (this.frase[f]=='a' || this.frase[f]=='A')&lt;br /&gt;
                cant++;&lt;br /&gt;
            this.cantidadLetrasa=cant;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }).mount('#aplicacion');&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''bind (enlace) a clases CSS'''&lt;br /&gt;
&lt;br /&gt;
Se tiene la siguiente declaración de lenguajes de programación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data:{ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cuando se hace clic sobre una de las opciones tachar dicho lenguaje agregando una clase en forma dinámica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''solución:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;style&amp;gt;&lt;br /&gt;
    .tachar {&lt;br /&gt;
      text-decoration: line-through;&lt;br /&gt;
      color: blue;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ul style=&amp;quot;font-size:2rem; list-style:none&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li v-for=&amp;quot;lenguaje in lenguajes&amp;quot;&lt;br /&gt;
          @click=&amp;quot;presion(lenguaje)&amp;quot;&lt;br /&gt;
          v-bind:class=&amp;quot;{tachar: lenguaje.tachado }&amp;quot;&amp;gt;&lt;br /&gt;
        {{lenguaje.nombre}}&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
var app= Vue.createApp({&lt;br /&gt;
      data: () =&amp;gt; ({ &lt;br /&gt;
        lenguajes: [&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Java',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'PHP',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Python',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Ruby',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'Kotlin',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            nombre: 'C#',&lt;br /&gt;
            tachado:false&lt;br /&gt;
          }]        &lt;br /&gt;
      }),&lt;br /&gt;
      methods: {&lt;br /&gt;
        presion: function(lenguaje) {&lt;br /&gt;
          lenguaje.tachado= !lenguaje.tachado;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }).mount('#aplicacion');&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes en Vue'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'acerca-de' que muestre el nombre del programa y la versión del mismo.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;acerca-de&amp;gt;&amp;lt;/acerca-de&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('acerca-de', {&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      navigator: navigator.appCodeName || 'Unknown',&lt;br /&gt;
      version: navigator.appVersion&lt;br /&gt;
    }),&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Programa: {{navigator}}&amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;p&amp;gt;Versión: {{version}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt; `&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion')&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades'''&lt;br /&gt;
&lt;br /&gt;
Modificar el ejemplo de la componente 'hola-mundo' de tal forma que se pueda seleccionar el idioma que se debe mostrar utilizando un control de formulario 'select'&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;select v-model=&amp;quot;idioma&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;castellano&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;option&amp;gt;ingles&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;/p&amp;gt;    &lt;br /&gt;
    &amp;lt;hola-mundo v-bind:idioma=&amp;quot;idioma&amp;quot;&amp;gt;&amp;lt;/hola-mundo&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  var app = Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      idioma: 'castellano'&lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('hola-mundo', {&lt;br /&gt;
    props: ['idioma'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='castellano'&amp;quot;&amp;gt;Hola mundo&amp;lt;/p&amp;gt;&lt;br /&gt;
                  &amp;lt;p v-if=&amp;quot;idioma=='ingles'&amp;quot;&amp;gt;Hello world&amp;lt;/p&amp;gt;&lt;br /&gt;
              &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: propiedades de tipo objeto y vector'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente llamada 'articulos' que tenga una propiedad que reciba un vector de objetos literales. El objetivo de la componente es mostrar los datos del vector de articulos en una tabla HTML&lt;br /&gt;
&lt;br /&gt;
'''Solución'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;articulos v-bind:datos=&amp;quot;datos&amp;quot;&amp;gt;&amp;lt;/articulos&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      datos: [{&lt;br /&gt;
          codigo: 1, &lt;br /&gt;
          descripcion: 'papas',&lt;br /&gt;
          precio: 12.52&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 2, &lt;br /&gt;
          descripcion: 'naranjas',&lt;br /&gt;
          precio: 21&lt;br /&gt;
        },{&lt;br /&gt;
          codigo: 3, &lt;br /&gt;
          descripcion: 'peras',&lt;br /&gt;
          precio: 18.20&lt;br /&gt;
        }]      &lt;br /&gt;
    })&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('articulos', {&lt;br /&gt;
    props:['datos'],&lt;br /&gt;
    template: `&amp;lt;div&amp;gt;&lt;br /&gt;
                 &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Código&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Descripción&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Precio&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;tr v-for=&amp;quot;art in datos&amp;quot;&amp;gt;&amp;lt;td&amp;gt;{{art.codigo}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.descripcion}}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{art.precio}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
                 &amp;lt;/table&amp;gt;&lt;br /&gt;
               &amp;lt;/div&amp;gt;`&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Componentes: definición de métodos y modelo de datos'''&lt;br /&gt;
&lt;br /&gt;
Crear una componente que contenga un botón que en su interior tenga el valor 0. Cada vez que se lo presione se debe incrementar en 1.&lt;br /&gt;
&lt;br /&gt;
'''Solución:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;aplicacion&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;contador&amp;gt;&amp;lt;/contador&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/vue&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  var app= Vue.createApp({&lt;br /&gt;
  })&lt;br /&gt;
&lt;br /&gt;
  app.component('contador', {&lt;br /&gt;
    template:`&amp;lt;div&amp;gt;&amp;lt;button v-on:click=&amp;quot;incrementar()&amp;quot;&amp;gt;&lt;br /&gt;
              {{cantidad}}&lt;br /&gt;
              &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;`,&lt;br /&gt;
    data: () =&amp;gt; ({&lt;br /&gt;
      cantidad: 0&lt;br /&gt;
    }),&lt;br /&gt;
    methods: {&lt;br /&gt;
      incrementar: function() {&lt;br /&gt;
        this.cantidad++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  app.mount('#aplicacion');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.tutorialesprogramacionya.com/vueya/&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=jfEEQVdbl54&amp;amp;list=PLPl81lqbj-4J-gfAERGDCdOQtVgRhSvIT&amp;amp;index=7&amp;amp;t=0s&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=JQUERY&amp;diff=17867</id>
		<title>JQUERY</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=JQUERY&amp;diff=17867"/>
				<updated>2024-03-06T17:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mfernandez: /* Exercicis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JQuery =&lt;br /&gt;
&lt;br /&gt;
Llibreria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introducció ==&lt;br /&gt;
&lt;br /&gt;
jQuery és un framework de JavaScript que permet simplificar el maneig dels documents HTML, l'arbre DOM, manejar esdeveniments, desenvolupar animacions i afegir interacció amb Ajax a pàgines web.&lt;br /&gt;
&lt;br /&gt;
JQuery és programari lliure i de codi obert creat per John Resig que a més treballa per a Mozilla Corporation.&lt;br /&gt;
&lt;br /&gt;
La primera versió de jQuery estable va aparèixer l'any 2006 i l'última, d'agost de 2023, és la versió 3.7.1.&lt;br /&gt;
&lt;br /&gt;
L'ús de jQuery allibera al programador d'haver d'implementar els mètodes JavaScript que el framework conté. Entre altres facilitats, jQuery té implementats tots els seus mètodes per detectar el navegador de l'usuari i adaptar les&lt;br /&gt;
funcions a cada un d'ells.&lt;br /&gt;
&lt;br /&gt;
La llibreria jQuery en resum ens aporta els següents avantatges:&lt;br /&gt;
&lt;br /&gt;
* Estalvia moltes línies de codi.&lt;br /&gt;
* Fa transparent el suport de la nostra aplicació per als navegadors principals.&lt;br /&gt;
* Proveeix d'un mecanisme per a la captura d'esdeveniments.&lt;br /&gt;
* Proveeix un conjunt de funcions per animar el contingut de la pàgina de forma molt senzilla.&lt;br /&gt;
* Integra funcionalitats per treballar amb AJAX.&lt;br /&gt;
&lt;br /&gt;
== PRINCIPIS D'ÚS ==&lt;br /&gt;
La forma d'interactuar amb la pàgina és mitjançant la funció $ (), un àlies de jQuery que rep com a paràmetre una expressió CSS o el nom d'una etiqueta HTML i retorna tots els elements que concorden amb l'expressió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Retorna l'element amb id=&amp;quot;peu&amp;quot; &lt;br /&gt;
$(&amp;quot;#peu&amp;quot;)  &lt;br /&gt;
// Retorna una matriu d'elements amb class=&amp;quot;destacat&amp;quot; &lt;br /&gt;
$(&amp;quot;.destacat&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un cop obtinguts els elements, se'ls pot aplicar qualsevol de les funcions que facilita la biblioteca.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// S'elimina l'estil (removeClass()) i s'aplica un nou (addClass()) a tots els nodes amb class=&amp;quot; destacat &amp;quot; &lt;br /&gt;
$(&amp;quot;.destacat&amp;quot;).removeClass(&amp;quot;destacat&amp;quot;).addClass(&amp;quot;nodestacat&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CARREGAR LA WEB ==&lt;br /&gt;
Una de les funcions més utilitzades en les aplicacions JavaScript és la següent &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
window.onload = function () {,,,}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forma abreviada amb crida funció&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(inicializar);&lt;br /&gt;
&lt;br /&gt;
	function inicializar(){&lt;br /&gt;
		$(&amp;quot;#boton&amp;quot;).click(function(){&lt;br /&gt;
			alert(&amp;quot;Boton pulsado&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forma abreviada amb funció anònima&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
   ...&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Forma més abreviada&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(function() {...}); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passar una funció anomenada en lloc de funció anònima&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function nomFunció() {&lt;br /&gt;
        ...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
$(document).ready(nomFunció);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El gran avantatge de la funció de jQuery, és que la pàgina es pot manipular quan s'ha carregat el seu codi HTML (i per tant, s'ha construït l'arbre DOM de la pàgina) mentre que la funció de JavaScript espera que es carreguin tots els&lt;br /&gt;
elements de la pàgina, incloent totes les imatges. D'aquesta manera, les aplicacions realitzades amb jQuery poden respondre de forma molt més ràpida que les aplicacions JavaScript tradicionals.&lt;br /&gt;
&lt;br /&gt;
== ACCÉS ALS ELEMENTS DEL WEB ==&lt;br /&gt;
D'altra banda, la funció getElementById () és possiblement la més utilitzada a desenvolupar aplicacions web, ja que permet seleccionar un element a partir de la seva atribut &amp;quot;id&amp;quot;. A més, hi ha dues funcions relacionades:&lt;br /&gt;
&lt;br /&gt;
getElementsByTagName () i getElementsByName (). jQuery inclou la funció $ ()&lt;br /&gt;
com una alternativa més ràpida i completa per seleccionar qualsevol element de la pàgina:&lt;br /&gt;
&lt;br /&gt;
'''Amb JavaScript''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Seleccionar un elemento &lt;br /&gt;
document.getElementById(&amp;quot;miParrafo&amp;quot;); &lt;br /&gt;
// Seleccionar todos los enlaces &lt;br /&gt;
document.getElementsByTagName(&amp;quot;a&amp;quot;); &lt;br /&gt;
// Seleccionar todo lo anterior &lt;br /&gt;
---- &lt;br /&gt;
// Seleccionar mediante la clase CSS &lt;br /&gt;
---- &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Amb jQuery''' &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Seleccionar un elemento &lt;br /&gt;
$(&amp;quot;#miParrafo&amp;quot;); &lt;br /&gt;
 // Seleccionar todos los enlaces &lt;br /&gt;
$(&amp;quot;a&amp;quot;); &lt;br /&gt;
// Seleccionar todo lo anterior &lt;br /&gt;
$(&amp;quot;#miParrafo, a&amp;quot;) &lt;br /&gt;
// Seleccionar mediante la clase CSS &lt;br /&gt;
$(&amp;quot;.miClase&amp;quot;) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SELECTORS ==&lt;br /&gt;
jQuery utilitza selectors per identificar aquells elements sobre els quals es vol actuar. Un selector és una cadena de caràcters que identifica un o diversos elements d'una pàgina web.&lt;br /&gt;
Els selectors bàsics utilitzats en jQuery són:&lt;br /&gt;
&lt;br /&gt;
'''Selector d'etiquetes.'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;h2&amp;quot;)  &lt;br /&gt;
//selecciona tots els elements que tenen etiqueta &amp;lt;h2&amp;gt; ... .. &amp;lt;/ h2&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Selector per etiqueta/contingut. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;p:contains('Hola')&amp;quot;) &lt;br /&gt;
//selecciona els paràgrafs (&amp;lt;p&amp;gt; ... &amp;lt;/ p&amp;gt;) que continguin la paraula &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--* Selector per etiqueta / propietat. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;div:visible&amp;quot;) &lt;br /&gt;
//selecciona els div que tinguin la propietat visible = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Selector per etiquetes/classe. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;li.nombreClase&amp;quot;) &lt;br /&gt;
//selecciona els li que tinguin assignada la classe CSS nombreClase&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Selector per identificador'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (&amp;quot;#meusComentaris&amp;quot;)&lt;br /&gt;
// selecciona tots els elements que tenen l'atribut id = meusComentaris&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''Selector per classe CSS'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (&amp;quot;.miClase&amp;quot;)&lt;br /&gt;
// selecciona tots els elements que tenen com a atribut class = &amp;quot;miClase&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''Selectors de diversos elements'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (&amp;quot;p, a&amp;quot;)&lt;br /&gt;
// Selecciona tots els &amp;lt;a&amp;gt; i tots els &amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:selectors.png]]&lt;br /&gt;
&lt;br /&gt;
'''Selectors posicionals'''&lt;br /&gt;
&lt;br /&gt;
  Els selectors posicionals estan basats en les relacions posicionals entre elements segons l'estructura DOM del document.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;200 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Selector&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;350 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Explicació&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;p:first&amp;quot;) || Selecciona el primer element &amp;lt; p&amp;gt; de la pàgina&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;p:last&amp;quot;) || Selecciona l'últim element &amp;lt; p&amp;gt; de la pàgina&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;img[src$=.Png]:first) || Selecciona el primer &amp;lt;img&amp;gt; de la pàgina que té un atribut src acabat en .png &lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;p[@miClase]&amp;quot;)  || Selecciona tots els paràgrafs que implementin la classe CSS miClase&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;div[p]&amp;quot;) || Selecciona tots els divs que continguin algun paràgraf dins&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;p[a]&amp;quot;) || Selecciona tots els paràgrafs que tinguin almenys un enllaç&lt;br /&gt;
|-&lt;br /&gt;
| $ (&amp;quot;input[@type = ràdio] [@checked]&amp;quot;)  || Selecciona tots els ràdio buttons que han estat revisats&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:selectors_posicionals.png]]&lt;br /&gt;
&lt;br /&gt;
'''Selectors parent&amp;gt; child'''&lt;br /&gt;
&lt;br /&gt;
Els selectors parent&amp;gt; child permeten que es pugui accedir als elements que siguin fills directes d'altres.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// selecciona totes les etiquetes b que són filles directes dels paràgrafs&lt;br /&gt;
$ (&amp;quot;p&amp;gt;b&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// selecciona totes les etiquetes que són filles directes de l'element amb id = &amp;quot;capa&amp;quot;&lt;br /&gt;
$ (&amp;quot;#capa&amp;gt;*&amp;quot;) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Selectors de formulari'''&lt;br /&gt;
&lt;br /&gt;
Els selectors de formulari permeten seleccionar elements de formulari de forma específica.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;200 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Selector&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;350 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Explicació&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:text&amp;quot;)|| selecciona tots els input que tinguin tipus text&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:checkbox&amp;quot;) || selecciona tots els input que tinguin tipus checkbox &lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:input&amp;quot;)  || Selecciona tots els elements input&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:button&amp;quot;) || Selecciona tots els elements button&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:enabled&amp;quot;) || Selecciona tots els elements activats del formulari&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:checked&amp;quot;)  || Selecciona tots els ràdio buttons i checkbox del formulari que estan premuts&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:ràdio :checked&amp;quot;) || Selecciona tots els radio button que estiguin revisats&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Fitxer:selectors_formulari.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Selectors de jerarquia'''&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;200 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Selector&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;350 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Explicació&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;p a&amp;quot;)|| Selector de descendents: selecciona elements 'p' que baixin d'un altre element 'a' (CSS 1)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;div.entrada h2&amp;quot;)|| Selector de descendents: selecciona elements que baixin d'un altre element (CSS 1)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;div.entrada&amp;gt; h2&amp;quot;) || Selector de fills: selecciona elements que siguin fills directes d'un altre element (CSS 2) &lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;tr:nth-child(1)&amp;quot;)  || Pseudo classe fill: selecciona l'enèsim fill d'un element (CSS 3)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;tr:first-child&amp;quot;) || Pseudo classe primer fill: selecciona el primer fill d'un element (CSS 2)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;tr:last-child&amp;quot;) || Pseudo classe últim fill: selecciona l'últim fill d'un element (CSS 3)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;div:only-child&amp;quot;)  || Pseudo classe fill únic: selecciona els elements que siguin un únic fill de altres elements (CSS 3)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:first)&amp;quot;) || Pseudo classe primer: selecciona el primer element d'un grup de elements. Equival a eq (0) (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:last)&amp;quot;)  || Pseudo classe últim: selecciona l'últim element d'un grup de elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;body &amp;gt; div:has(a)&amp;quot;)  || Selecciona el/s fill/s directe/s &amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt; de &amp;lt;body&amp;gt;&amp;lt;/nowiki&amp;gt; que contenen enllaços&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:gt (0)&amp;quot;) || Pseudo classe més gran que: selecciona tots els elements amb un índex major que l'indicat en un grup d'elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:lt (3)&amp;quot;)  || Pseudo classe menor que: selecciona tots els elements amb un índex menor que l'indicat en un grup d'elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:even&amp;quot;) || Pseudo classe parell: selecciona els elements parells d'un grup d'elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;td:odd&amp;quot;)  || Pseudo classe senar: selecciona els elements imparells d'un grup de elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;div.entrada~p&amp;quot;) || Selector de germans: selecciona tots els germans que es troben precedits d'un altre element (CSS 3)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;div.entrada+p&amp;quot;) || Selector de proper adjacent: similar a l'anterior, però només selecciona el adjacent directe (CSS 2)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;h2:parent&amp;quot;) || Pseudo classe pare: selecciona els pares d'altres elements (jQuery)&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;:empty&amp;quot;) || Pseudo classe buit: selecciona els elements que no tinguin cap fill,incloent text pla (CSS 3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.w3schools.com/cssref/trysel.asp Més Exemples]&lt;br /&gt;
&lt;br /&gt;
== TAULES DE SELECTORS ==&lt;br /&gt;
Quan una funció jQuery retorna diversos elements, ho fa en format de taula,on cada element està identificat per una posició de la mateixa. llavors mitjançant: eq (índex) podem obtenir l'element de la llista a què es fa referència&lt;br /&gt;
de la posició índex + 1, tenint en compte que les llista en jQuery comencen comptar des de 0.&lt;br /&gt;
Per exemple, en la següent instrucció emmagatzema una referència al tercer enllaç que implementa la classe &amp;quot;enlaceAmigos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
enllaç = $ ('a.enlaceAmigos:eq(2)')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuació es mostra com accedir al paràgraf número 3 (segona posició)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
miParrafo = $ (&amp;quot;p:eq(2)&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OPERADORS ==&lt;br /&gt;
Es poden utilitzar els operadors ^ =, $ = i * =.&lt;br /&gt;
* ^ = per obtenir els elements d'una pàgina HTML que continguin un atribut que comenci per un valor determinat.&lt;br /&gt;
* $ = per obtenir els elements d'una pàgina HTML que acabi per un valor determinat.&lt;br /&gt;
* * = per obtenir els elements d'una pàgina HTML que contingui un valor determinat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (document) .ready (function () {&lt;br /&gt;
// fa referència als enllaços que comencen per mailto:&lt;br /&gt;
$ ('a[href^=&amp;quot;mailto:&amp;quot;]'). addClass ('mailto');&lt;br /&gt;
// fa referència als enllaços que facin referència a un fitxer pdf&lt;br /&gt;
$ ('a[href$=&amp;quot;.pdf&amp;quot;]'). addClass ('enlacePdf');&lt;br /&gt;
// fa referència a un enllaç a sitio.com&lt;br /&gt;
$ ('a[href*=&amp;quot;sitio.com&amp;quot;]'). addClass ('lloc');&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquestes classes CSS han d'estar prèviament definides a la pàgina, per exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
.mailto {color: blue; }&lt;br /&gt;
.enlacePdf {color: green; }&lt;br /&gt;
.sitio {color: yellow; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
D'aquesta manera, els enllaços de tipus mailto apareixeran en blau, els enllaços a fitxers pdf verds i els enllaços a &amp;quot;sitio.com&amp;quot; apareixeran en groc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Utilitzant Events (Event handler) ===&lt;br /&gt;
Si volem afegir esdeveniments als diferents elements que apareixen a la pàgina web utilitzant Jquery podem fer-ho molt fàcilment:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#boton').click(function() {&lt;br /&gt;
	$('#missatge').show(); //es mostra el missatge&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Però quan s'executa un element moltes vegades volem utilitzar l'element on està l'esdeveniment per tal de fer alguna cosa amb els seus valors. Jquery ens permet utilitzar la paraula reservada '''this'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#Boton').click(function() {&lt;br /&gt;
	$(this).hide(); // el botó desapareix&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''$(this)'''proporciona una manera més maca d'accedir al botó en comptes de tornar a seleccionar-ho.&lt;br /&gt;
Amb JQuery podem fer coses molt potents com el botó 'toggle':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#toggleBoto').click(function() {&lt;br /&gt;
	$('#missatge').toggle();&lt;br /&gt;
	if ($('#missatge').is(':visible')) {&lt;br /&gt;
		$(this).val('Amaga');     //val canvia o retorna el valor&lt;br /&gt;
	} else {&lt;br /&gt;
		$(this).val('Mostra');&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Desenvolupar una pàgina que mostri dos títols de primer nivell, en ser pressionats canviar el color de font, fons i la font del text.&lt;br /&gt;
:[[solucio_titols]]&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Confeccionar una taula amb 5 files. Fer que canvi de color la fila que es pressiona amb el ratolí.&lt;br /&gt;
:[[solucio_taula]]&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Disposar dues llistes després quan es premi un botó amagar tots els li de la primera llista.&lt;br /&gt;
:[[solucio_ocultar_llista]]&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Mostrar una sèrie de llenguatges de programació i aplicar un estil ressaltat per a aquells llenguatges que són orientats a objectes. Quan es premi un botó afegir la propietat background-color a tots els elements d'aquesta classe.&lt;br /&gt;
:[[solucio_llenguatges]]&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TIPUS D'ESDEVENIMENTS ==&lt;br /&gt;
jQuery disposa de tantes funcions com esdeveniments estàndard de JavaScript. El nom de cada funció és el mateix que el de l'esdeveniment, sense l'habitual prefix &amp;quot;On&amp;quot;: focus (), blur (), keyup (), mouseover (), MouseUp (), resize (), submit (), etc.&lt;br /&gt;
&lt;br /&gt;
'''ESDEVENIMENTS RELACIONATS AMB EL RATOLÍ'''&lt;br /&gt;
&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/event_click.asp click]''' Detecta l'esdeveniment clic quan es produeix en un element de la pàgina.&lt;br /&gt;
* '''dblclick ()''' Detecta un esdeveniment quan es produeix un doble clic sobre un element.&lt;br /&gt;
* '''hover()''' Aquesta funció en realitat serveix per manejar dos esdeveniments, quan el ratolí entra i surt de sobre d'un element. Per tant s'ha d'enviar dos funcions en comptes d'una.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mup_mdown_ref mouseDown()]''' Detecta un esdeveniment quan l'usuari fa clic al moment que pressiona el botó i independentment de si el deixa anar o no. serveix tant per al botó dret com l'esquerre del ratolí.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mup_mdown_ref MouseUp() ]''' Detecta un esdeveniment quan l'usuari ha fet clic i després deixa anar un botó del ratolí. L'esdeveniment MouseUp es produeix només en el moment dedeixar anar el botó.&lt;br /&gt;
* '''mouseenter ()''' Detecta l'esdeveniment es produeix en situar el ratolí a sobre d'un element de la pàgina.&lt;br /&gt;
* '''mouseleave ()''' Detecta un esdeveniment quan el ratolí surt de sobre d'un element de la pàgina.&lt;br /&gt;
* '''mousemove ()''' Detecta l'esdeveniment que es produeix en moure el ratolí sobre un element de la pàgina.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseover_mouseout mouseout ()]''' Detecta l'esdeveniment que es deslliga quan l'usuari surt amb el ratolí de la superfície d'un element.&lt;br /&gt;
* '''mouseover ()''' Detecta l'esdeveniment que es produeix quan el ratolí està sobre un element, però té com a particularitat que pot produir diverses vegades mentre es mou el ratolí sobre l'element, sense necessitat d'haver sortit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ESDEVENIMENTS RELACIONATS AMB EL TECLAT'''&lt;br /&gt;
&lt;br /&gt;
* '''keydown ()''' Detecta l'esdeveniment que es produeix en el moment que es pressiona una tecla del teclat, independentment de si s'allibera la pressió o es manté. Es produeix una única vegada en el moment exacte de la pressió.&lt;br /&gt;
* '''keypress ()''' Detecta l'esdeveniment que ocorre quan es digitals un caràcter, o es pressiona altre tipus de tecla. És com l'esdeveniment keypress de Javascript, per la qual que s'entén que keypress () s'executa una vegada, com a resposta a una pulsació i immediat alliberament de la tecla, o diverses vegades si es prem una tecla i es manté premuda.&lt;br /&gt;
* '''keyup ()''' Detecta l'esdeveniment que es produeix en el moment d'alliberar una tecla, és a dir, en deixar de pressionar una tecla que teníem premuda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function operaEvento(evento){&lt;br /&gt;
   $(&amp;quot;#loescrito&amp;quot;).html($(&amp;quot;#loescrito&amp;quot;).html() + evento.type + &amp;quot;: &amp;quot; + evento.which + &amp;quot;, &amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
   $(document).keypress(operaEvento);&lt;br /&gt;
   $(document).keydown(operaEvento);&lt;br /&gt;
   $(document).keyup(operaEvento);&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ESDEVENIMENTS COMBINATS TECLAT-RATOLÍ'''&lt;br /&gt;
&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_blur_alert blur () ]''' L'esdeveniment blur es llança sobre un element que acaba de perdre el focus. Normalment aquest esdeveniment és aplicable a inputs de formularis.&lt;br /&gt;
&lt;br /&gt;
* '''Focusin ()''' Esdeveniment que es produeix quan l'element guanya el focus de la aplicació, que pot produir en fer clic sobre un element o alpressionar el tabulador i situar el focus en aquest element.&lt;br /&gt;
* '''focusout ()''' Ocorre quan l'element perd el focus de l'aplicació, que pot ocórrer quan el focus està en aquest element i premem el tabulador,o ens movem a un altre element amb el ratolí.&lt;br /&gt;
* '''focus() ''' Serveix per a definir accions quan es produeix l'esdeveniment focus de Javascript, quan l'element guanya el focus de l'aplicació&lt;br /&gt;
&lt;br /&gt;
== ALTRES ESDEVENIMENTS ==&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_resize resize ()]''' Aquest esdeveniment és llança quan es canvia la mida de la finestra.Aquest esdeveniment només s'envia a l'objecte window.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_scroll scroll ()]''' Aquest esdeveniment s'envia als elements que canvien el seu scroll davant d'una acció de l'usuari. S'aplica als objectes Window System, frames i elements amb la propietat overflow CSS posada en estat &amp;quot;scroll&amp;quot;.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_select_ref select ()]''' L'esdeveniment select es llança quan l'usuari selecciona un text del element sobre el qual es gestiona l'esdeveniment. Aquest esdeveniment només s'aplica als textarea i als inputs de tipus text.&lt;br /&gt;
* '''submit ()''' Aquest esdeveniment es llança quan un usuari està tractant d'enviar un formulari. Aquest esdeveniment només és vàlid per a formularis. depenent del navegador és possible enviar el formulari sense necessitat de punxar en un botó, simplement prement la tecla ENTER. Quan això succeeix el esdeveniment no es llança, per la qual cosa hem de parar especial atenció a aquest comportament per gestionar en el seu corresponent esdeveniment &amp;quot;Keypressed&amp;quot;.&lt;br /&gt;
* '''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_toggle toggle ()]''' L'esdeveniment toggle s'utilitza per generar comportaments canvi d'estat generats en punxar sobre un element. Per exemple, pot interessar que en punxar sobre un element es visualitzi i que al tornar a punxar s'oculti. Toggle ens permet fer això associant dos o més funcions al mateix esdeveniment que es van executant de forma seqüencial.&lt;br /&gt;
La primera vegada que es punxa sobre l'element (i totes les vegades senars), es executa la primera funció i la segona vegada que es punxa l'element (i totes les vegades parells) s'executa la segona funció:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (document) .ready (function () {&lt;br /&gt;
   $ (&amp;quot;p&amp;quot;). toggle (function () {&lt;br /&gt;
        alert (&amp;quot;M'acabes d'activar&amp;quot;);&lt;br /&gt;
     }, function () {&lt;br /&gt;
          alert (&amp;quot;M'acabes de desactivar&amp;quot;);&lt;br /&gt;
   });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* '''unload ()''' L'esdeveniment unload es llança quan un usuari navega fora de la pàgina web o es dirigeix cap a una altra part de la web. S'executa sempre, fins i tot si l'usuari tanca el navegador (No s'utilitza desde la versió 1.8)&lt;br /&gt;
&lt;br /&gt;
== DEFINIR / ELIMINAR ESDEVENIMENTS: ON/ OFF ==&lt;br /&gt;
&lt;br /&gt;
'''ON() '''&lt;br /&gt;
&lt;br /&gt;
El mètode On () permet definir qualsevol tipus d'esdeveniments i els enllaça amb el controlador d'esdeveniment que el programador desitgi.&lt;br /&gt;
&lt;br /&gt;
Va ser introduïda en jQuery 1.7 per portar una mica de &amp;quot;ordre&amp;quot; a les anteriors funcions ('''delegate(), live(), bind()'''). On() té tots els avantatges de delegate () però al seu torn serveix com la funció bind () depenent de com ho fem servir.&lt;br /&gt;
&lt;br /&gt;
La seva sintaxi és la següent:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Exemples''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Un event&lt;br /&gt;
$(&amp;quot;p&amp;quot;).on(&amp;quot;click&amp;quot;, function() { &lt;br /&gt;
    console.log( &amp;quot;click&amp;quot; ); &lt;br /&gt;
}); &lt;br /&gt;
&lt;br /&gt;
//Multiples events&lt;br /&gt;
$(&amp;quot;p&amp;quot;).on({ &lt;br /&gt;
    &amp;quot;click&amp;quot;: function() { console.log( &amp;quot;clicked!&amp;quot; ); }, &lt;br /&gt;
    &amp;quot;mouseover&amp;quot;: function() { console.log( &amp;quot;hovered!&amp;quot; ); } &lt;br /&gt;
}); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Asignació de una funció a diversos events al mateix temps&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 var functionControlador = function (event) {&lt;br /&gt;
 alert(&amp;quot;Heyyy Hola mon!!&amp;quot;);&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 $(document).ready(function () {&lt;br /&gt;
 $(&amp;quot;p&amp;quot;).on(&amp;quot;click mouseenter mouseleave&amp;quot;, functionControlador);&lt;br /&gt;
 });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Associar més events a elements fills&lt;br /&gt;
&lt;br /&gt;
https://jfraguio.wordpress.com/2014/12/10/recorrer-el-dom-de-forma-eficiente-con-jquery-delegacion-de-eventos/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''OFF()'''&lt;br /&gt;
&lt;br /&gt;
Al igual que amb la asocación d'esdeveniments, també arribava amb l'acció contrària.&lt;br /&gt;
&lt;br /&gt;
L'objectiu principal de la nova instrucció és reemplaçar a tots d'una manera consistent.&lt;br /&gt;
&lt;br /&gt;
La sintaxi de off () resulta similar a la d'on ():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#container a').off('click');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Amb off (), tots els paràmetres són opcionals. Quan s'utilitza en la seva forma més simple, $ (elements) .off (), s'eliminen tots els esdeveniments associats al conjunt seleccionat.&lt;br /&gt;
&lt;br /&gt;
== MÈTODES ==&lt;br /&gt;
'''text ()'''&lt;br /&gt;
&lt;br /&gt;
Per saber el contingut d'un element l'objecte jQuery compta amb un mètode anomenat text (), que es pot utilitzar per&lt;br /&gt;
* Modificar el contingut d'un element&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (&amp;quot;#MiElemento&amp;quot;).text(&amp;quot;paràgraf Nou&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obtenir el contingut d'un element&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var contingut = $(&amp;quot;#miElemento&amp;quot;).text ()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Exemple''&lt;br /&gt;
&lt;br /&gt;
La següent funció jQuery canvia el text del paràgraf que està en primera posició quan es prem dobleclick en qualsevol paràgraf de la web, a més mostra el contingut anterior del paràgraf en una finestra.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (document).ready(function () {&lt;br /&gt;
   $ (&amp;quot;p&amp;quot;).dblclick(function () {&lt;br /&gt;
     var contingut = $(&amp;quot;p:eq(1)&amp;quot;).text ()&lt;br /&gt;
     alert (contingut);&lt;br /&gt;
     $ (&amp;quot;p:eq(1)&amp;quot;).text(&amp;quot;nou text&amp;quot;);&lt;br /&gt;
   })&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''html ()'''&lt;br /&gt;
&lt;br /&gt;
És possible afegir blocs de codi HTML a partir d'un element de la pàgina. Aquesta propietat és bàsicament = innerHTML del DOM.&lt;br /&gt;
* Per afegir un bloc HMTL&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (element).html(bloque_HTML)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Per obtenir el bloc HTML contingut a partir de l'element que fa referència l'objecte jQuery.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (element).html()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Exemple''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function inicializarEventos(){ &lt;br /&gt;
  $(&amp;quot;#boton1&amp;quot;).click(presionBoton1); &lt;br /&gt;
}&lt;br /&gt;
function presionBoton1(){ &lt;br /&gt;
  var x; &lt;br /&gt;
  x=$(&amp;quot;#divFormulari&amp;quot;); &lt;br /&gt;
  x.html(&amp;quot;&amp;lt;form&amp;gt;Ingrese nombre:&amp;lt;input type='text' id='nombre'&amp;gt; &amp;lt;br&amp;gt;Introduzca clave:&amp;lt;input type='text' id='clave'&amp;gt;  &amp;lt;br&amp;gt; &amp;lt;input type='submit' value='confirmar'&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;); &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple molt comú és canviar el text que hi ha en un element html. Amb Jquery es pot fer de dues maneres que donen resultats idèntics:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Primera Manera:&lt;br /&gt;
$(&amp;quot;selector&amp;quot;).html(&amp;quot;Acabo d'afegir Text a un element&amp;quot;);&lt;br /&gt;
// Segona Manera:&lt;br /&gt;
$(&amp;quot;selector&amp;quot;)[0].innerHTML = &amp;quot;Acabo d'afegir Text a un element&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que passaria si el 'selector' retornes més d'un element?&lt;br /&gt;
Doncs que si utilitzem la 1a manera, es posaria el text &amp;quot;Acabo d'afegir Text a un element&amp;quot; a tots els elements seleccionat. Molt útil quan volem canviar tot el HTML d'un grup d'elements.&lt;br /&gt;
I amb la segona manera?&lt;br /&gt;
Hauriem de fer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var elements = $(&amp;quot;selector&amp;quot;);&lt;br /&gt;
for(var i=0;i&amp;lt;elements.length;i++)&lt;br /&gt;
elements[i].innerHTML =&lt;br /&gt;
&amp;quot;Acabo d'afegir Text a un grup de nodes&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquest últim exemple és MOLT POC RECOMANAT. És molt més pràctic i eficient utilitzar la 1a manera a l'hora de programar amb JQuery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Desenvolupar una pàgina que mostri l'ocupació dels mètode text (), text (valor), html () i html (valor)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_text]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Disposar dos botons, en ser pressionat el primer crear un formulari en forma dinàmica que sol·liciti el nom d'usuari i la clau. Si es pressiona el segon botó mostrar tots els elements HTML del formulari prèviament creat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_html]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*tenim dos paràgrafs amb text, un input i tres botons, es tracta veure la diferència entre ells. per això quan cliquem sobre el primer botó caldrà canviar el text (text), el segon el html (HTML) i el tercer el valor de l'input (value)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_text_html_value]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Tenemos tres botones, un parrafo que pone &amp;quot;texto original&amp;quot; y una tabla 3x3 con texto, cuando clicamos el primer botón muestra un mensaje de alerta con el contenido del párrafo, cuando apretamos el segundo botón modifica el contenido del párrafo con otro texto y el tercer botón cambia el contenido de texto de la tabla.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_text]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Crear una capa cuyo id será &amp;quot;wrapper&amp;quot;.Tendré dos botones que harán las siguientes acciones:&lt;br /&gt;
Pintar una capa roja dentro de wrapper, es decir, insertar el siguiente código &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:red; width:300px; height:300px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Mostrar un alert con el código fuente que hay dentro de wrapper.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_html]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''attr()/removeAttr''' &lt;br /&gt;
&lt;br /&gt;
El método attr() permite agregar propiedades a un elemento HTML y recuperar el valor &lt;br /&gt;
de su propiedad. &lt;br /&gt;
*  Recuperar el valor de la propietat &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(elemento).attr(nombre_propiedad) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Dona valor a una propietat &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(elemento).attr(nombre de propiedad,valor) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  Eliminar una propietat &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(elemento).removeAttr(nombre de propiedad) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Exemple''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){ &lt;br /&gt;
  $(&amp;quot;p&amp;quot;).click(function(){ &lt;br /&gt;
    $(&amp;quot;#miEnlace&amp;quot;).attr(&amp;quot;title&amp;quot;,&amp;quot;Pepe&amp;quot;); &lt;br /&gt;
  }) &lt;br /&gt;
}); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''addClass / removeClass  / toggleClass'''&lt;br /&gt;
&lt;br /&gt;
Els mètodes addClass i removeClass ens permeten associar i desassociar una classe a un element o conjunt d'elements HTML.&lt;br /&gt;
* Afegir una classe CSS a un element.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).addClass(&amp;quot;nombre_clase&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Eliminar una classe CSS d'un element&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).removeClass(&amp;quot;nombre_clase&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
.azul{              //clase css&lt;br /&gt;
  color: #0000cc;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
//dins del script&lt;br /&gt;
$(&amp;quot;#elBotonA&amp;quot;).click(asociarClase);&lt;br /&gt;
&lt;br /&gt;
function asociarClase()&lt;br /&gt;
{ &lt;br /&gt;
 var x=$(&amp;quot;h1&amp;quot;); &lt;br /&gt;
 x.addClass(&amp;quot;azul&amp;quot;);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per activar o desactivar una classe usem '''[http://www.w3schools.com/jquery/html_toggleclass.asp toggleClass]'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;div&amp;quot;).toggleClass(&amp;quot;nombre_clase&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tenim una pàgina web amb un text &amp;quot;lorem ipsum ...&amp;quot;, i dins d'ella un input costat d'un botó que s'introduirà una paraula (no utilitzar id), en el moment que cliquem s'esborra el text introduït.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[solucio_borrar]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En la pàgina web https://daneden.github.io/animate.css/ podem utilitzar diferents formes de fer animacions amb el text, utilitza jquery per a fer animacions. crea un div que contingui un text que quan passi el ratolí per damunt faci l'animació. Llegiu la documentació oficial &lt;br /&gt;
&lt;br /&gt;
:[[solucio_animate]]&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Definir una taula sense l'atribut border. En pressionar un botó afegir-li la propietat border amb el valor 1. Si es pressiona un altre botó recuperar i mostrar el valor de l'atribut border i finalment si es pressiona un altre botó eliminar la propietat border.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_attr]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*En prémer el botó, canviar la imatge per una aleatòria. Usar &amp;quot;attr&amp;quot; per a canviar la direcció de la imatge.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_canvi_imatge]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Disposar un div amb un conjunt de paràgrafs. Quan es premi un botó associar-li una classe que es pressioni altre desassociar d'aquesta classe.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_class]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*utilitzant addClass, fer que en prémer un botó agafe els estils de la llibreria animate.css perquè es produeixi l'animació corresponent. Als dos segons deurà eliminar la classe (pista setTimeout)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_animate_class]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Tenemos un formulario que en su interior existe un label &amp;quot;introduce valores&amp;quot;, un input de type=text y un botón. El fin consiste en borrar la etiqueta por ello debe usarse la propiedad &amp;quot;find&amp;quot; que busca en el interior de un elemento. Para que funcione debe usarse dos eventos el dobleclick y salir del botón. &lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_find_on]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Tenemos un div con id=&amp;quot;primero&amp;quot; que dentro tiene otro div luego un span, luego otro div y por último dos span seguidos. Queremos remarcarlo de rojo el segundo span, debe usarse la propiedad la propiedad find.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_segundo_span]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Utilitzant CSS ===&lt;br /&gt;
Després que hem seleccionat els elements som capaços d'afegir i treure estils, classes, i més. &lt;br /&gt;
Exemple per obtenir un atribut css:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	var fontSize = $('#productes tbody tr:first').css('font-size');&lt;br /&gt;
	alert(fontSize);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemple per canviar un atribut css:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$('#productes tbody tr:even').css('background-color','#dddddd');&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Però i si es vol canviar o afegir dos o més atributs?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#productes tbody tr:even').css('background-color','#dddddd');&lt;br /&gt;
$('#productes tbody tr:even').css('color', '#666666');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Podem simplificar lo anterior amb una sola crida :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#productes tbody tr:even').css({&lt;br /&gt;
	'background-color': '#dddddd', &lt;br /&gt;
	'color': '#666666',&lt;br /&gt;
	'font-size': '11pt',&lt;br /&gt;
	'line-height': '2.5em' &lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_element_classlist_add classList.add]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;myDIV&amp;quot;).classList.add(&amp;quot;mystyle&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir elements al DOM ===&lt;br /&gt;
Podem afegir elements al HTMl utilitzant JQUERY:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;button&amp;quot;).click(function(){&lt;br /&gt;
    $(&amp;quot;&amp;lt;span&amp;gt;Hello world!&amp;lt;/span&amp;gt;&amp;quot;).insertAfter(&amp;quot;p&amp;quot;); //inserta la etiqueta &amp;quot;&amp;lt;span&amp;gt;Hello world!&amp;lt;/span&amp;gt;&amp;quot; amb text després de &amp;lt;p&amp;gt;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//altre exemple&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;&amp;lt;p&amp;gt;insertar després del div la etiq p&amp;lt;/p&amp;gt;&amp;quot;).insertAfter($(&amp;quot;#div&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;button&amp;quot;).click(function(){&lt;br /&gt;
    $(&amp;quot;&amp;lt;span&amp;gt;Hello world!&amp;lt;/span&amp;gt;&amp;quot;).insertBefore(&amp;quot;p&amp;quot;);  //inserta la etiqueta &amp;quot;&amp;lt;span&amp;gt;Hello world!&amp;lt;/span&amp;gt;&amp;quot; amb abans de &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Altres funcions per afegir elements:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Añadir un texto y unas etiquetas HTML al elemento con id=&amp;quot;miElemento&amp;quot;. &lt;br /&gt;
$(&amp;quot;#miElemento&amp;quot;).append(&amp;quot;&amp;lt;p&amp;gt;Nuevo contenido de miElemento&amp;lt;/p&amp;gt;&amp;quot;) &lt;br /&gt;
//Para añadir un elemento al final de la lista &lt;br /&gt;
$(&amp;quot;ul&amp;quot;).append(&amp;quot;&amp;lt;li&amp;gt;otro item al final&amp;lt;/li&amp;gt;&amp;quot;); &lt;br /&gt;
//Para añadir un elemento al principio de la lista &lt;br /&gt;
$(&amp;quot;ul&amp;quot;).prepend(&amp;quot;&amp;lt;li&amp;gt;otro item al principio&amp;lt;/li&amp;gt;&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Una altra forma de fer el mateix però al revés.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('&amp;lt;strong&amp;gt;Començar!&amp;lt;/strong&amp;gt;').prependTo('#missatge');&lt;br /&gt;
$('&amp;lt;strong&amp;gt;Acabar!&amp;lt;/strong&amp;gt;').appendTo('#missatge');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ELIMINAR elements al DOM ===&lt;br /&gt;
Fins i tot, podem esborrar elements:&lt;br /&gt;
&lt;br /&gt;
.remove (), no només elimina el contingut d'un element, sinó que també elimina l'element en si.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#missatge').remove();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.empty () elimina el contingut (NO l'element en si)i tots els descendents d'un element. Per exemple, si fas servir .empty () en un 'ol', també eliminaràs tots els seus 'li' i el seu text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#missatge').empty();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RECORRER DOM ===&lt;br /&gt;
&lt;br /&gt;
Accedir al [http://www.w3schools.com/jquery/traversing_closest.asp pare]:&lt;br /&gt;
El mètode closest retorna el primer ancestre de l'element seleccionat.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 $(&amp;quot;span&amp;quot;).closest(&amp;quot;ul&amp;quot;).css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;, &amp;quot;border&amp;quot;: &amp;quot;2px solid red&amp;quot;});   //canvia el css del pare &amp;lt;ul&amp;gt;&lt;br /&gt;
//&amp;lt;span&amp;gt; seria el fill i &amp;lt;ul&amp;gt; seria el pare, avi..&lt;br /&gt;
&lt;br /&gt;
 var id = $(&amp;quot;span&amp;quot;).closest(&amp;quot;ul&amp;quot;).attr(&amp;quot;id&amp;quot;);      //obté la id del element pare&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.w3schools.com/jquery/traversing_parent.asp parent()]&lt;br /&gt;
&lt;br /&gt;
El mètode parent () retorna l'element pare directe de l'element seleccionat.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    $(&amp;quot;span&amp;quot;).parent().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.w3schools.com/jquery/traversing_parents.asp parents()] Padres, abuelos, bisabuelos, tataranietos…&lt;br /&gt;
&lt;br /&gt;
El mètode parents () retorna tots els elements ancestral del element seleccionats.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    $(&amp;quot;span&amp;quot;).parents().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_traversing_next next()]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    $(&amp;quot;li.primer&amp;quot;).next().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mètode next() retorna el pròxim element germà de l'element seleccionat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_traversing_prev prev()]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    $(&amp;quot;li.primer&amp;quot;).prev().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mètode prev() retorna l'anterior element germà de l'element seleccionat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/traversing_find.asp find()]''' Hijos, nietos, bisnietos, tataranietos&lt;br /&gt;
&lt;br /&gt;
El mètode find()  retorna els elements descendents de l'element seleccionat.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
    $(&amp;quot;ul&amp;quot;).find(&amp;quot;span&amp;quot;).css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});  //dibuixa de color roig el span dins del ul&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/traversing_children.asp children()]'''&lt;br /&gt;
&lt;br /&gt;
El mètode children()  retorna tots els fills directes de l'element seleccionat.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
   $(&amp;quot;ul&amp;quot;).children().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});;  //dibuixa de color roig el fills directes.&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/traversing_siblings.asp siblings()]'''&lt;br /&gt;
&lt;br /&gt;
El mètode siblings()  retorna tots els elements germans de l'element seleccionat.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
    $(&amp;quot;li.start&amp;quot;).siblings().css({&amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;});  //dibuixa de color roig el germans del element seleccionat.&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
*tenemos un div que será un cuadrado rojo de 400x400 px, además tenemos 6 botones. El primero de ellos, eliminará todos los elementos que se encuentren dentro de él. El segundo botón inserta un cuadrado verde mediante la función .html de 50x50px, el tercer botón añadirá un elemento al final que tendrá de fondo azul, el cuarto botón añadirá un elemento al principio de fondo amarillo, el quinto botón eleminará el último elemento y el sexto botón eliminará el primer elemento&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_dom]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Implementar una página que contenga una lista con cuatro items. El primer botón, elimina los elementos de la lista(li), el segundo restaura los elementos, el tercero añade otro item, el cuarto añade un item al principio, el quinto elimina un elemento del final, el sexo elimina un elemento del principio, el sexto elimina los dos primeros(usar lt),el septimo elimina los dos últimos, el octavo inserta un item después del ul.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_dom_II]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFECTES VISUALS ==&lt;br /&gt;
Totes les aplicacions web modernes incorporen petits efectes visuals i animacions que, si s'utilitzen de forma adequada, milloren la interacció amb la aplicació i la seva usabilitat. jQuery inclou de sèrie els efectes visuals més utilitzats&lt;br /&gt;
pels dissenyadors, podent controlar mitjançant les seves opcions la durada de cada efecte.&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_hide_show hide / show]''' &lt;br /&gt;
&lt;br /&gt;
jQuery permet gestionar els efectes visuals d'un pàgina web utilitzant, entre altres, els mètodes hide (amagar) i show (mostrar). Aquests mètodes ja els hem vist, però en aquest apartat veurem com aconseguir ocultar i mostrar informació a diferents velocitats.&lt;br /&gt;
Mostra un element de forma normal (normal), ràpida (fast) o lenta (slow), també es pot indicar els milisegons de l'acció. També és possible indicar una funció perquè s'executi en finalitzar l'efecte visual.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).show ([&amp;quot;fast&amp;quot; / &amp;quot;slow&amp;quot; / &amp;quot;normal&amp;quot; / &amp;quot;mil·lisegons&amp;quot;], [function])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Perquè es mostri de forma instantània s'omet qualsevol paràmetre.&lt;br /&gt;
Els paràmetres funcionen de forma equivalent amb hide (ocultar)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element) .hide ([&amp;quot;fast&amp;quot; / &amp;quot;slow&amp;quot; / &amp;quot;normal&amp;quot; / &amp;quot;milisegons&amp;quot;], [function])&lt;br /&gt;
$(#id).hide(&amp;quot;slow&amp;quot;);&lt;br /&gt;
$(#id).hide(&amp;quot;slow&amp;quot;,function(){alert(hola!!)});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''fadeIn / fadeOut / [http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_fadeto fadeTo]'''&lt;br /&gt;
&lt;br /&gt;
Aquests mètodes provoquen també que un element es mostri (fadein) o s'oculti (fadeout) però actua sobre la transparència dels objectes.&lt;br /&gt;
La sintaxi i els atributs són equivalents als mètodes show / hide&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).fadeIn ([&amp;quot;fast&amp;quot; / &amp;quot;slow&amp;quot; / &amp;quot;normal&amp;quot; / &amp;quot;mil·lisegons&amp;quot;], [function])&lt;br /&gt;
$(element).fadeOut([&amp;quot;fast&amp;quot;/&amp;quot;slow&amp;quot;/&amp;quot;normal&amp;quot;/&amp;quot;milisegundos&amp;quot;],[function]) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El mètode '''fadeTo''' pot modificar la opacitat d'un element fins a un valor determinat que es passa per paràmetre.&lt;br /&gt;
Podem inicialitzar aquest mètode de les següents formes:&lt;br /&gt;
&lt;br /&gt;
''fadeTo ([velocitat], [valor d'opacitat])''&lt;br /&gt;
&lt;br /&gt;
Indiquem la velocitat de transició de l'estat actual al nou estat (slow / normal / fast) o un valor indicat en mil·lisegons.&lt;br /&gt;
El valor de l'opacitat és un nombre real entre 0 (transparent) i 1 (opac) També podem cridar al mètode fadeTo amb tres paràmetres:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).fadeTo ([velocitat], [valor d'opacitat], [funció])&lt;br /&gt;
 $(&amp;quot;#descripcion&amp;quot;).fadeTo(&amp;quot;fast&amp;quot;,0.5);} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquesta segona estructura de la funció permet executar una funció quan finalitza la transició.&lt;br /&gt;
Cal tenir en compte que fadeTo per més que indiquem el valor 0 en opacitat l'espai que ocupa l'element a la pàgina seguirà ocupat per un requadre buit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_toggle toggle()]'''&lt;br /&gt;
 &lt;br /&gt;
Ja hem vist el mètode toggle per alternar l'execució de dues funcions, però en aquest apartat el veurem per intercanviar la visibilitat d'un element.&lt;br /&gt;
El mètode toggle permet ocultar un element si aquest està visible i mostrar si està ocult.&lt;br /&gt;
&amp;lt;source lang = &amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(element).toggle([“fast”/”slow”/“normal”/milisegundos],[function]) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_animate Animate()]'''&lt;br /&gt;
&lt;br /&gt;
El mètode animate permet realitzar animacions personalitzades. La seva sintaxi és la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$ (element).animate ({propietats}, [durada], [f_animación], [callback])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
on:&lt;br /&gt;
&lt;br /&gt;
* propietats, és l'únic paràmetre obligatori i s'utilitza per indicar que atributs CSS es volen actualitzar amb nous valors. JQuery només permet el canvi de propietats CSS que tinguin valors numèrics. per exemple&lt;br /&gt;
podríem canviar la mida de la lletra però no la seva font. La mesura per defecte és la de píxels. Els nous valors s'han d'indicar de forma absoluta o de forma relativa utilitzant la notació &amp;quot;+ = nº&amp;quot; p &amp;quot;+ = nº&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* durada, indica la durada de l'animació en milisegons o un valor identificatiu de la velocitat (normal, fast o slow).&lt;br /&gt;
&lt;br /&gt;
''Exemple''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;#btn1&amp;quot;).click(function(){&lt;br /&gt;
        $(&amp;quot;#box&amp;quot;).animate({height: &amp;quot;300px&amp;quot;},2000, &amp;quot;linear&amp;quot;,function(){alert(&amp;quot;hola&amp;quot;);})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_slidetoggle slideToggle()]'''&lt;br /&gt;
&lt;br /&gt;
Quan l'animació ha acabat podem programar que s'executi una funció automàticament (callback function):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#missatge').slideToggle('slow', function() {&lt;br /&gt;
	alert('s'ha acabat l'animació!')&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_slideup_slidedown slideUp()/ slideDown()]'''&lt;br /&gt;
&lt;br /&gt;
Però potser, el que volem és que desaparegui el botó:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$('#missatge').slideUp('slow', function() {&lt;br /&gt;
	$('#toggleBoto').fadeOut();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[https://jqueryui.com/draggable/ Draggable]'''&lt;br /&gt;
&lt;br /&gt;
jQuery UI té una funció .draggable () que permet arrossegar qualsevol element d'HTML; pots fer clic i moure-ho a qualsevol part de la pàgina. Però hi ha que utilitzar la llibreria &lt;br /&gt;
&amp;lt;script src=&amp;quot;//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 $( &amp;quot;#draggable&amp;quot; ).draggable();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exercicis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*Tenemos un planeta y de fondo tiene el espacio que queremos que cuando cliquemos cambie de color rojo lentamente&lt;br /&gt;
:[[css]]&lt;br /&gt;
&lt;br /&gt;
:[[sol_planeta]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tenemos un menu que cuando pasemos el ratón por encima de un botón(div) añada un clase y cuando salga la elimine por tanto haremos uso del evento hover.&lt;br /&gt;
:[[sol_hover]]&lt;br /&gt;
&lt;br /&gt;
*Tenemos un input que deseamos cambiar el borde del input cuando hagamos foco sobre él, añadiendo una propiedad en css.&lt;br /&gt;
&lt;br /&gt;
:[[sol_focus]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tenemos un SuperMario que cuando pasamos el ratón por encima de él salta y cuando lo dejamos cae hacia abajo. Usad hover y animate.&lt;br /&gt;
&lt;br /&gt;
:[[sol_mario_animate_hover]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Se trata de hacer saltar a Sonic mediante dos teclas arriba y abajo.&lt;br /&gt;
&lt;br /&gt;
:[[sol_sonic_keypress_animate]]&lt;br /&gt;
&lt;br /&gt;
*Tenemos varios párrafos mediante la función draggable tenemos que enviar cada uno de ellos a una papelera(imagen), en el momento que llega a ella deberá eliminarse(en este ejercicio aún no es necesario usar droppable) Además deberá mostrar la posición en X e Y. Para este ejercicio no se usará la función droppable Más [http://www.desarrolloweb.com/articulos/preguntas-respuestas-draggable-jqueryui.html info]&lt;br /&gt;
&lt;br /&gt;
:[[sol_draggable_papelera]]&lt;br /&gt;
&lt;br /&gt;
*Se tratará de realizar un juego de relacionar palabras, por ello tenemos tres cuadrados 100x100 que uno será Julio, otro Albert, otro Alex, otro Ramón, otro Raquel y David. En otra parte de la pantalla, tenemos 6 apellidos, corresponden con Noguera, Canela, Salinas, Sort, López y Villote. Se deberá arrastrar el apellido sobre el cuadrado correspondiente (por ejemplo: Noguera al cuadrado Julio ). Las palabras deberán desaparecer progresivamente (SlideUp).Se deberá añadir un contador de tiempo (append) y palabras acertadas.&lt;br /&gt;
&lt;br /&gt;
:[[sol_juego_color]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tenemos otro planeta que tiene de fondo el espacio que queremos que cuando cliquemos cambie de color rojo gradualmente la mismo tiempo que se reduzca a la mitad de su tamaño, por ello, usaremos las jqueryUi la función &amp;quot;animate&amp;quot;&lt;br /&gt;
:[[sol_planetaII]]&lt;br /&gt;
&lt;br /&gt;
*Se trata de hacer una calculadora básica que muestre el resultado usando Selectable (display as grid) en JqueryUI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Es tracta de crear dos inputs i al fer clic es produeïx un esdeveniment que mostra el seus valor en cas de estar omplits mostrant un missatge.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_id]]&lt;br /&gt;
&lt;br /&gt;
*Enllaça el paràgraf &amp;lt; p &amp;gt; amb Diversos esdeveniments (clic, MouseEnter, mouseleave) i un controlador únic paràgraf tots ells que fa que el contingut dels paràgrafs de canvieu de color al produir-se l'esdeveniment corresponent.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_esdeviments]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Canvia el text del paràgraf que està en primera posició quan es fa dobleclick en qualsevol paràgraf del web, a més mostra el contingut anterior del paràgraf en una finestra.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_canvia_paragraf]]&lt;br /&gt;
&lt;br /&gt;
*Aquesta pàgina web canvia l'atribut del títol de l'enllaç al fer clic sobre el primer paràgraf.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_atribut]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La pàgina web conté botons que modifiquen els atributs de vora de la taula (no hi ha que usar css). Botó canvia, recupera borde i elimina atribut&lt;br /&gt;
&lt;br /&gt;
:[[solucio_botons_atributs]]&lt;br /&gt;
&lt;br /&gt;
*Crea un &amp;lt; h1 &amp;gt; i a més dos botons que permeten enllaçar i eliminar una classe CSS d'un element respectivament i que aquesta canvie de color.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_enllaçar_eliminar_classe]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Crea un botó que afegeixi un formulari i un altre per veure'n el contingut&lt;br /&gt;
&lt;br /&gt;
:[[solucio_modificar_formulari]]&lt;br /&gt;
&lt;br /&gt;
*Utilitzant efectes, fes que un requadre amb text i mitjançant l'ús de dos botons podrem fer que s'oculti lentament el quadre o que es mostra ràpidament.&lt;br /&gt;
&lt;br /&gt;
:[[solucio_show_hide]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- //apunts alex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fonaments ==&lt;br /&gt;
La potencia de Jquery radica en recuperar elements de les pàgines html i realitzar operacions amb ells d'una manera fàcil i ràpida. Si coneixes CSS, ets conscient del poder dels selectors que descriuen grups d'elements pel seu tipus, atributs o situació dins del document. Amb Jquery podem utilitzar aquest coneixement, i simplificar la manera d'utilitzar Javascript.&lt;br /&gt;
=== Selectors ===&lt;br /&gt;
Per exemple, el selector&lt;br /&gt;
*p a&lt;br /&gt;
fa referència a tots els enllaços (elements &amp;lt;nowiki&amp;gt;&amp;lt;a&amp;gt;&amp;lt;/nowiki&amp;gt;) que estan dintre d'un element &amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;. Jquery utilitza els mateixos selectors CSS i a més a més, inclou alguns dels selectors més poderosos de CSS3.&lt;br /&gt;
Amb Jquery, utilitzarem la següent sintaxi:&lt;br /&gt;
'''$(selector)''' o '''jquery(selector))'''.&lt;br /&gt;
Per exemple, per obtenir tots els enllaços que estan dintre d'un element &amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt; farem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;quot;p a&amp;quot;);&lt;br /&gt;
//o bé:&lt;br /&gt;
jquery(&amp;quot;p a&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Un altre exemple: Si volem ocultar tots els divs que pertanyen a la classe &amp;quot;ender&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(&amp;quot;div.ender&amp;quot;).hide();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Un altre exemple molt comú és canviar el text que hi ha en un element html. Amb Jquery es pot fer de dues maneres que donen resultats idèntics:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Primera Manera:&lt;br /&gt;
$(&amp;quot;selector&amp;quot;).html(&amp;quot;Acabo d'afegir Text a un element&amp;quot;);&lt;br /&gt;
// Segona Manera:&lt;br /&gt;
$(&amp;quot;selector&amp;quot;)[0].innerHTML = &amp;quot;Acabo d'afegir Text a un element&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Que passaria si el 'selector' retornes més d'un element?&lt;br /&gt;
Doncs que si utilitzem la 1a manera, es posaria el text &amp;quot;Acabo d'afegir Text a un element&amp;quot; a tots els elements seleccionat. Molt útil quan volem canviar tot el HTML d'un grup d'elements.&lt;br /&gt;
I amb la segona manera?&lt;br /&gt;
Hauriem de fer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var elements = $(&amp;quot;selector&amp;quot;);&lt;br /&gt;
for(var i=0;i&amp;lt;elements.length;i++)&lt;br /&gt;
elements[i].innerHTML =&lt;br /&gt;
&amp;quot;Acabo d'afegir Text a un grup de nodes&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aquest últim exemple és MOLT POC RECOMANAT. És molt més pràctic i eficient utilitzar la 1a manera a l'hora de programar amb JQuery.&lt;br /&gt;
&lt;br /&gt;
Exemples de selectors:&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;200 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Selector&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;350 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Explicació&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;p:even&amp;quot;) || Selecciona tots els paràgrafs parells &lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;p:odd&amp;quot;) || Selecciona tots els paràgrafs senars &lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;tr:nth-child(1)&amp;quot;)  || Selecciona la primera fila de cada taula&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;body &amp;gt; div&amp;quot;) || Selecciona el/s fill/s directe/s &amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt; de &amp;lt;body&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;a[href$= 'pdf ']&amp;quot;) || Selecciona els enllaços a fitxers pdf&lt;br /&gt;
|-&lt;br /&gt;
| $(&amp;quot;body &amp;gt; div:has(a)&amp;quot;)  || Selecciona el/s fill/s directe/s &amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt; de &amp;lt;body&amp;gt;&amp;lt;/nowiki&amp;gt; que contenen enllaços&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Assegurant-nos que la pàgina està a punt ===&lt;br /&gt;
Abans que podem interaccionar amb elements d'HTML en una pàgina, aquests han d'estar carregats: només els podem canviar una vegada que són ja allà. L'única manera fiable era esperar que es carregui la pàgina sencera abans que poguéssim executar qualsevol script. &lt;br /&gt;
JQuery té un esdeveniment molt potent que ens permet executar el script tant aviat com sigui possible. Gràcies a això, les nostres aplicacions semblaran que es carreguen molt mes ràpid. Aquesta funció és: '''$(document).ready(....);'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    alert('Benvinguts a la pàgina JQuery ...');&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aquesta funció s'utilitza tant que existeix una drecera:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(function() { alert('Benvinguts a la pàgina JQuery ...'); });&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Utilitzant CSS ===&lt;br /&gt;
Després que hem seleccionat els elements som capaços d'afegir i treure estils, classes, i més. &lt;br /&gt;
Exemple per obtenir un atribut css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	var fontSize = $('#productes tbody tr:first').css('font-size');&lt;br /&gt;
	alert(fontSize);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exemple per canviar un atribut css:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	$('#productes tbody tr:even').css('background-color','#dddddd');&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Però i si es vol canviar o afegir dos o més atributs?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#productes tbody tr:even').css('background-color','#dddddd');&lt;br /&gt;
$('#productes tbody tr:even').css('color', '#666666');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Podem simplificar lo anterior amb una sola crida :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#productes tbody tr:even').css({&lt;br /&gt;
	'background-color': '#dddddd', &lt;br /&gt;
	'color': '#666666',&lt;br /&gt;
	'font-size': '11pt',&lt;br /&gt;
	'line-height': '2.5em' &lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Utilitzant Events (Event handler) ===&lt;br /&gt;
Si volem afegir esdeveniments als diferents elements que apareixen a la pàgina web utilitzant Jquery podem fer-ho molt fàcilment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#boton').click(function() {&lt;br /&gt;
	$('#missatge').show(); //es mostra el missatge&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Però quan s'executa un element moltes vegades volem utilitzar l'element on està l'esdeveniment per tal de fer alguna cosa amb els seus valors. Jquery ens permet utilitzar la paraula reservada '''this'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#Boton').click(function() {&lt;br /&gt;
	$(this).hide(); // el botó desapareix&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''$(this)'''proporciona una manera més maca d'accedir al botó en comptes de tornar a seleccionar-ho.&lt;br /&gt;
Amb JQuery podem fer coses molt potents com el botó 'toggle':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#toggleBoto').click(function() {&lt;br /&gt;
	$('#missatge').toggle();&lt;br /&gt;
	if ($('#missatge').is(':visible')) {&lt;br /&gt;
		$(this).val('Amaga');&lt;br /&gt;
	} else {&lt;br /&gt;
		$(this).val('Mostra');&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Afegir elements al DOM ===&lt;br /&gt;
Podem afegir elements al HTMl utilitzant JQUERY:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('&amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;toggle&amp;quot; id=&amp;quot;toggleBoto&amp;quot;&amp;gt;').insertAfter('#missatge');&lt;br /&gt;
$('#toggleBoto').click(function() {&lt;br /&gt;
	$('#missatge').toggle();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Altres funcions per afegir elements:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('&amp;lt;strong&amp;gt;Començar!&amp;lt;/strong&amp;gt;').prependTo('#missatge');&lt;br /&gt;
$('&amp;lt;strong&amp;gt;Acabar!&amp;lt;/strong&amp;gt;').appendTo('#missatge');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fins i tot, podem esborrar elements:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#missatge').remove();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Canviar el text d'un element ===&lt;br /&gt;
Si volem canviar el text d'un element tenim dos maneres:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('p').html('&amp;lt;strong&amp;gt;Alerta!&amp;lt;/strong&amp;gt; hi ha etiquetes html... ');&lt;br /&gt;
$('h2').text('&amp;lt;strong&amp;gt;Alerta!&amp;lt;/strong&amp;gt; hi ha etiquetes html ...');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La funció '''$(selector).html(...)''' interpretarà les etiquetes html que s'introdueixin dintre del text a mostrar. En canvi, si no volem que s'interpretin les etiquetes html utilitzarem la funció '''$(selector).text(...)'''&lt;br /&gt;
Podem utilitzar aquestes funcions per obtenir el text en comptes de modificar-ho? Sí!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alert($('h2:first').text());&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Afegir efectes i animacions ===&lt;br /&gt;
Hi ha diverses funcions de jquery que tenen la habilitat de poder-se animar. Com l'efecte toggle de l'exemple anterior:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#toggleBoto').click(function() {&lt;br /&gt;
	$('#missatge').toggle('slow');&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quan l'animació ha acabat podem programar que s'executi una funció automàticament (callback function):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#missatge').slideToggle('slow', function() {&lt;br /&gt;
	alert('s'ha acabat l'animació!')&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Però potser, el que volem és que desaparegui el botó:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$('#missatge').slideUp('slow', function() {&lt;br /&gt;
	$('#toggleBoto').fadeOut();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Molt més ===&lt;br /&gt;
Com ja heu vist, amb JQuery podeu fer moltes coses de manera ràpida i fàcil. Us recomano aquests llibres : &amp;lt;p&amp;gt; Earle Castledine,  Craig Sharkie, &amp;quot;jQuery: Novice to Ninja&amp;quot;, Ed. Sitepoint, 2010, ISBN 978-0-9805768-5-6 &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Bear Bibeault, Yehuda Katz, &amp;quot;JQuery in Action Second Edition&amp;quot;, Ed. Manning, 2010, ISBN 978-935182-32-0 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://ubilabs.github.io/geocomplete/&lt;br /&gt;
&lt;br /&gt;
==Exercicis==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Exercici Botons Celestials amb jQuery===&lt;br /&gt;
Crea una pàgina web amb dos botons amb el text:&lt;br /&gt;
*Text boto 1: 'Angelet'&lt;br /&gt;
*Text boto 2: 'Diablet'&lt;br /&gt;
El comportament ha de ser el següent:&lt;br /&gt;
Cada vegada que es clica sobre un botó 'Angelet' es creen ''n'' botons més, on ''n'' és un número aleatori entre 1 i 10 i aquests botons poden ser 'Angelets o Diablets'.&lt;br /&gt;
Cada vegada que es clica sobre un botó 'Diablet' s'eliminen ''n'' botons, on ''n'' és un número aleatori entre 1 i 20.&lt;br /&gt;
&lt;br /&gt;
:[[solució botons-celestials-jquery]]&lt;br /&gt;
&lt;br /&gt;
:[[solució botons-celestials-jquery-II]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exercici Web Dinámica amb jQuery ===&lt;br /&gt;
a) Crea un HTML amb els següents camps:&lt;br /&gt;
Input text1 : Que demani la etiqueta que es vol crear&lt;br /&gt;
Input text2 : Que demani On es vol crear (una altre etiqueta que ja hauria d'existir)&lt;br /&gt;
Boto crear: Crea el node del input text1 com a fill de input text2.&lt;br /&gt;
b)Creació automática:&lt;br /&gt;
Crea automàticament una Web via DOM que contingui:&lt;br /&gt;
Tants paràgrafs com text trobis a la web http://www.lipsum.com/&lt;br /&gt;
&lt;br /&gt;
:[[solució web-dinamica-jquery]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Fitxer:programador.gif]]&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/comprobar-sin-un-checkbox-esta-seleccionado-con-jquery&lt;/div&gt;</summary>
		<author><name>Mfernandez</name></author>	</entry>

	</feed>