passing data from child to parent using event and emit
<!--App.vue-->
<template>
<div>
<app-header v-bind:title="title" v-on:changeTitle="updateTitle($event)"></app-header>
<app-ninjas v-bind:ninjas="ninjas"></app-ninjas>
<ul>
<li v-for="ninja in ninjas">{{ ninja.name }}</li>
</ul>
<app-footer v-bind:title="title"></app-footer>
</div>
</template>
<script>
// Imports
import Header from './components/Header.vue';
import Footer from './components/Footer.vue';
import Ninjas from './components/Ninjas.vue';
export default {
components: {
'app-header': Header,
'app-footer': Footer,
'app-ninjas': Ninjas
},
data () {
return {
ninjas: [
{name: 'Ryu', speciality: 'Vue Components', show: false},
{name: 'Crystal', speciality: 'HTML Wizardry', show: false},
{name: 'Hitoshi', speciality: 'Click Events', show: false},
{name: 'Tango', speciality: 'Conditionals', show: false},
{name: 'Kami', speciality: 'Webpack', show: false},
{name: 'Yoshi', speciality: 'Data Diggin', show: false}
],
title: 'Vue Wizards'
}
},
methods: {
updateTitle: function(updatedTitle){
this.title = updatedTitle;
}
}
}
</script>
<!--header.vue-->
<template>
<header>
<h1 v-on:click="changeTitle">{{ title }}</h1>
</header>
</template>
<script>
export default {
props: {
title: {
type: String,
required: true
}
},
data(){
return{
}
},
methods: {
changeTitle: function(){
this.$emit('changeTitle', 'Vue Ninjas');
}
}
}
</script>
<style scoped>
header{
background: lightgreen;
padding: 10px;
}
h1{
color: #222;
text-align: center;
}
</style>
<style>
body{
margin: 0;
font-family: 'Nunito SemiBold';
}
</style>