FRAMEWORKS
FRONT


Pensando en componentes
Divide y vencerás

Divide y vencerás

Este contenedor podría ser nuestro App.vue
Divide y vencerás

Esto podría ser un componente, que se encarga de cargar y mostrar el listado de commits CommitsList.vue o CommitsLoader.vue
Divide y vencerás

Esto podría ser un componente, que se encarga de cargar y mostrar el listado de ramas BranchesSelector.vue
Divide y vencerás

Esto podría ser un componente, que se encarga de recibir un objeto de tipo commit y representarlo en la pantalla Commit-item.vue
Teóricamente
<div id="app">
<h2>últimos commits del repo</h2>
<branches-selector/>
<commit-list/>
</div>
Nuestro App.vue
<div class="branches">
<div class="branch"
v-for="branch in branches">
<input type="radio">
<label>{{branch.name}}</label>
</div>
</div>
Nuestro BranchesSelector.vue
<div class="commits">
<div class="commit"
v-for="commit in commits">
<commit-item></commit-item>
</div>
</div>
Nuestro CommitList.vue
<div class="commit">
<!-- all the display -->
</div>
Nuestro CommitItem.vue
<div id="app">
<h2>últimos commits del repo</h2>
<branch-selector/>
<commit-list/>
</div>
Nuestro App.vue
Recuerda que tendrás que declarar en el módulo de el App.vue que se están usando dos componentes
import CommitList from './components/CommitList';
import BranchSelector from './components/BranchSelector';
export default {
name: 'App',
components: {
CommitList,
BranchSelector
},
};
Comunicar un componente con otro
<div class="commits">
<div class="commit"
v-for="commit in commits">
<commit-item></commit-item>
</div>
</div>
Necesitas indicarle al componente <commit-item> que quieres que trabaje y dibuje un determinado commit que tu te has encargado de encontrar y que de hecho está dando vueltas en el v-for
props
<div class="commits">
<div class="commit"
v-for="commit in commits">
<commit-item :dato="commit">
</commit-item>
</div>
</div>
<template>
<h2> El nombre del commit {{ dato.name }} </h2>
</template>
<script>
export default {
name : 'commit-item',
props : [ 'dato' ]
}
</script>
props
<div class="commits">
<div class="commit"
v-for="commit in commits">
<commit-item :dato="commit">
</commit-item>
</div>
</div>
De esta manera le estamos pasando como atributo o como propiedad al componente <commit-item> nuestro objeto o variable commit y el nombre del atributo que hemos usado ha sido 'dato'
Pregunta: ¿por qué he puesto los : ?
<template>
<h2> El nombre del commit {{ dato.name }} </h2>
</template>
<script>
export default {
name : 'commit-item',
props : [ 'dato' ]
}
</script>
De esta manera, si el componente quiere usar y acceder a ese commit que le han pasado, el ha de indicar que le llega una propiedad externa con el nombre "dato" para poder usarla
props
Probamos esto con el todo-list en directo
Comunicación de dentro hacia afuera


<!-- Esto sería en el fichero list.vue -->
<div class="lista">
<list-item :item="item" v-for="item in items" />
</div
<!-- Esto sería en el fichero list-item.vue -->
<div class="item">
<span>{{item.name}} x {{item.price}}</span>
<button @click="borrarAEste(item.name)">Borrar</button>
</div>
<!-- Esto sería en el fichero list.vue -->
<div class="lista">
<list-item
:item="item"
v-for="item in items"
v-on:borrarFruta="doThis"
/>
</div>
methods : {
doThis (nombreFruta) {
console.log(nombreFruta)
}
}
Paso 1. Definimos un evento
<div class="item">
<span>{{item.name}} x {{item.price}}</span>
<button
@click="$emit('borrarFruta', item.name)">Borrar</button>
</div>
Paso 2. Ejecutamos/emitimos ese evento en el componente hijo
<div class="item">
<span>{{item.name}} x {{item.price}}</span>
<button
@click="$emit('borrarFruta', item.name)">Borrar</button>
</div>
Resultado final
<div class="lista">
<list-item
:item="item"
v-for="item in items"
@borrarFruta="doThis"
/>
</div>
Completamos el ejercicio hasta que funcione :)
Siguiente ejercicio en grupo

Completamos el ejercicio hasta que funcione :) Nos creamos nuestra api
V2.0 Lo mismo pero con API

Continuamos con nuestros proyectos.
Avanzamos con la parte de WebApp
Curso de Programación web CLM Marzo 2025 VueJS. Componentes Repaso
By Yunior González Santana
Curso de Programación web CLM Marzo 2025 VueJS. Componentes Repaso
Curso de Programación web CLM Marzo 2025 VueJS. Componentes Repaso
- 47