Dear friends of the modern lightweight web, I hope you can help a noobie regarding vue3.
I share timetable detail between multiple child components and display the best five and the worst five-time wasters as one example. One of the components is intended to add new time data to the components. With an @click=”$emit” functionality. Unfortunately, it is not affecting the components. I see that it’s added for half a second, and then the default data comes back. Not showing the added “lux” data.
Therefore I hope one of you wizards, can show me, what silly error I made.
App.vue
<template> <Top5 :projects="entries"/> <TimeDetail @add-time-data="newTimeData"/> </template> export default { name: 'App', methods: { newTimeData(details) { this.entries.push(details); console.log(details); } }, data() { return { entries: [ {client:'Test', time: 20, date: '2020-09-03'}, {client:'Test2', time: 30, date: '2020-09-04'}, {client:'Test3', time: 45, date: '2020-09-05'} ] } },
TimeDetail.vue
<template> <div class="container-fluid"> <form> <div class="row"> <div class="col-md-1"> <label for="workdate">Date</label> <input type="date" class="form-control" id="workdate"> </div> <div class="col-md-2"> <label for="client">Client</label> <input type="text" class="form-control" id="client"> </div> <div class="col"> <label for="workhours">Hours (0.5 - 8)</label> <input type="range" class="form-control-range" id="workhours" min="0.5" max="8" step="0.5" value="0.5" oninput="this.nextElementSibling.value = this.value"> <output>0.5</output> hours </div> <div class="col-md-1"> <br><button type="submit" class="btn btn-primary" @click="$emit('add-time-data',{client:'Lux', time: 66, date: '2020-06-06'})">Submit</button> </div> </div> </form> </div> </template> <script> export default { name: 'TimeDetail', emits: ['add-time-data'], } </script>
PS: Console and vue.js devtools are not working with vue.js not detected error and console not showing log 🙁
Advertisement
Answer
Since the click event is fired by button with type submit
you should add prevent
modifier in order to prevent the default behavior which is the form submitting :
<button type="submit" ... @click.prevent="$emit('add-time-data',...)">Submit</button>