Ejemplos de Vue.js

Este capítulo presenta varios ejemplos de Vue.js; mediante la práctica con ejemplos podrás consolidar los conocimientos aprendidos.

Ejemplo de menú de navegación

Menú de navegación

Crea un menú de navegación simple:

<div id="main"> <!--El estilo del menú activo es la clase `active`--> <!--Para evitar que el enlace salte al hacer clic, usamos el modificador `prevent` (abreviatura de preventDefault).--> <nav v-bind:class="active" v-on:click.prevent> <!--Cuando se hace clic en un enlace del menú, llamamos al método `makeActive`, que se crea en la instancia de Vue.--> <a href="#" class="home" v-on:click="makeActive('home')">Home</a> <a href="#" class="projects" v-on:click="makeActive('projects')">Projects</a> <a href="#" class="services" v-on:click="makeActive('services')">Services</a> <a href="#" class="contact" v-on:click="makeActive('contact')">Contact</a> </nav> <!--La variable `active` a continuación cambiará automáticamente según el valor seleccionado actualmente.--> <p>Has seleccionado<b>el menú {{active}}</b></p> </div> <script>// Crear una nueva instancia de Vue var demo = new Vue({ // Elemento DOM, montar el modelo de vista el: '#main', // Definir propiedades y establecer valores iniciales data: { active: 'home' }, // Función utilizada al hacer clic en el menú methods: { makeActive: function(item){ // El modelo cambia, la vista se actualiza automáticamente this.active = item; } } });</script>

Pruébalo »

Ejemplo de edición de texto

Edición de texto

Haz clic en el texto especificado para editar el contenido:

<!--`v-cloak` oculta las variables no compiladas hasta que la instancia de Vue esté lista.--> <!--Después de hacer clic en el elemento, se llama al método `hideTooltip()`--> <div id="main" v-cloak v-on:click="hideTooltip"> <!--Esto es un cuadro de sugerencias `v-on:click.stop` es un manejador de eventos de clic; el modificador `stop` se usa para detener la propagación del evento `v-if` se usa para determinar que solo se muestre cuando `show_tooltip` sea `true`--> <div class="tooltip" v-on:click.stop v-if="show_tooltip"> <!--`v-model` vincula el contenido del área de texto Cuando el contenido del área de texto cambia, la variable correspondiente también cambia en tiempo real--> <input type="text" v-model="text_content" /> </div> <!--Al hacer clic, se llama al método `toggleTooltip` y se detiene la propagación del evento--> <!--La variable `text_content` cambia según el contenido del área de texto--> <p v-on:click.stop="toggleTooltip">{{text_content}}</p> </div> <script>var demo = new Vue({ el: '#main', data: { show_tooltip: false, text_content: 'Haz clic y edita el contenido.' }, methods: { hideTooltip: function(){ // Cuando el modelo cambia, la vista también se actualiza automáticamente this.show_tooltip = false; }, toggleTooltip: function(){ this.show_tooltip = !this.show_tooltip; } } })</script>

Pruébalo »

Ejemplo de lista de pedidos

Lista de pedidos

Crea una lista de pedidos y calcula el precio total:

<form id="main" v-cloak> <h1>Services</h1> <ul> <!--Recorre el array `services` y establece el estilo al hacer clic en la opción--> <li v-for="service in services" v-on:click="toggleActive(service)" v-bind:class="{ 'active': service.active}"> <!--Muestra el nombre del servicio y el precio del pedido Vue.js define un filtro de moneda para formatear el precio--> {{service.name}} <span>{{service.price | currency}}</span> </li> </ul> <div class="total"> <!--Calcula el precio de todos los servicios y formatea la moneda--> Total: <span>{{total() | currency}}</span> </div> </form> <script>// Filtro personalizado "currency" Vue.filter('currency', function (value) { return '$' + value.toFixed(2); }); var demo = new Vue({ el: '#main', data: { // Definir propiedades del modelo // La vista recorrerá los datos del array y los mostrará services: [ { name: 'Web Development', price: 300, active:true },{ name: 'Design', price: 400, active:false },{ name: 'Integration', price: 250, active:false },{ name: 'Training', price: 220, active:false } ] }, methods: { toggleActive: function(s){ s.active = !s.active; }, total: function(){ var total = 0; this.services.forEach(function(s){ if (s.active){ total+= s.price; } }); return total; } } });</script>

Pruébalo »

Ejemplo de página de búsqueda

Página de búsqueda

Escribe el contenido de búsqueda en el campo de entrada y la lista mostrará los elementos configurados:

<form id="main" v-cloak> <div class="bar"> <!--El modelo `searchString` está vinculado al campo de texto--> <input type="text" v-model="searchString" placeholder="Introduce el contenido de búsqueda" /> </div> <ul> <!--Recorre y muestra los datos--> <li v-for="article in filteredArticles"> <a v-bind:href="article.url"><img v-bind:src="article.image" /></a> <p>{{article.title}}</p> </li> </ul> </form> <script>var demo = new Vue({ el: '#main', data: { searchString: "", // Modelo de datos, en un entorno real puedes obtenerlos mediante Ajax articles: [ { "title": "What You Need To Know About CSS Variables", "url": "https://www.example.com/css/css-tutorial.html", "image": "/static.jyshare.com/images/icon/css.png?v=2" }, { "title": "Freebie: 4 Great Looking Pricing Tables", "url": "https://www.example.com/html/html-tutorial.html", "image": "/static.jyshare.com/images/icon/html.png?v=2" }, { "title": "20 Interesting JavaScript and CSS Libraries for February 2016", "url": "https://www.example.com/css3/css3-tutorial.html", "image": "/static.jyshare.com/images/icon/css3.png?v=2" }, { "title": "Quick Tip: The Easiest Way To Make Responsive Headers", "url": "https://www.example.com/css3/css3-tutorial.html", "image": "/static.jyshare.com/images/icon/css3.png?v=2" }, { "title": "Learn SQL In 20 Minutes", "url": "https://www.example.com/sql/sql-tutorial.html", "image": "/static.jyshare.com/images/icon/sql.png?v=2" }, { "title": "Creating Your First Desktop App With HTML, JS and Electron", "url": "https://www.example.com/js/js-tutorial.html", "image": "/static.jyshare.com/images/icon/html.png?v=2" } ] }, computed: { // Propiedad computada, filtra la búsqueda filteredArticles: function () { var articles_array = this.articles, searchString = this.searchString; if(!searchString){ return articles_array; } searchString = searchString.trim().toLowerCase(); articles_array = articles_array.filter(function(item){ if(item.title.toLowerCase().indexOf(searchString) !== -1){ return item; } }) // Devuelve los datos filtrados return articles_array;; } } });</script>

Pruébalo »

Ejemplo de cambio de diseño

Cambiar diferentes diseños

Haz clic en el botón en la esquina superior derecha para cambiar la distribución de las diferentes páginas:

<form id="main" v-cloak> <div class="bar"> <!--Dos botones para alternar entre diferentes diseños de lista--> <a class="list-icon" v-bind:class="{ 'active': layout == 'list'}" v-on:click="layout = 'list'"></a> <a class="grid-icon" v-bind:class="{ 'active': layout == 'grid'}" v-on:click="layout = 'grid'"></a> </div> <!--Hemos configurado dos diseños de página. Cuál se usa depende del enlace "layout"--> <ul v-if="layout == 'grid'" class="grid"> <!--Usa imagen grande, sin texto--> <li v-for="a in articles"> <a v-bind:href="a.url" target="_blank" rel="noopener noreferrer"><img v-bind:src="a.image.large" /></a> </li> </ul> <ul v-if="layout == 'list'" class="list"> <!--Usa imagen pequeña y título--> <li v-for="a in articles"> <a v-bind:href="a.url" target="_blank" rel="noopener noreferrer"><img v-bind:src="a.image.small" /></a> <p>{{a.title}}</p> </li> </ul> </form> <script>var demo = new Vue({ el: '#main', data: { // Modelo de vista, los valores posibles son "grid" o "list". layout: 'grid', articles: [{ "title": "Tutorial de HTML", "url": "https://www.example.com/html/html-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/htmlbig.png?v=2", "small": "/static.jyshare.com/images/icon/html.png?v=2" } }, { "title": "Tutorial de CSS", "url": "https://www.example.com/css/css-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/cssbig.png?v=2", "small": "/static.jyshare.com/images/icon/css.png?v=2" } }, { "title": "Tutorial de JS", "url": "https://www.example.com/js/js-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/jsbig.jpeg?v=2", "small": "/static.jyshare.com/images/icon/js.png?v=2" } }, { "title": "Tutorial de SQL", "url": "https://www.example.com/sql/sql-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/sqlbig.png?v=2", "small": "/static.jyshare.com/images/icon/sql.png?v=2" } }, { "title": "Tutorial de Ajax", "url": "https://www.example.com/ajax/ajax-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/ajaxbig.png?v=2", "small": "/static.jyshare.com/images/icon/ajax.png?v=2" } }, { "title": "Tutorial de Python", "url": "https://www.example.com/pyhton/pyhton-tutorial.html", "image": { "large": "/static.jyshare.com/images/mix/pythonbig.png?v=2", "small": "/static.jyshare.com/images/icon/python.png?v=2" } }] } });</script>

Pruébalo »
Otras extensiones