I am trying to get one random item from an array of entries once the user has click a button. But I can't seem to get it working. The only error I get is "Property or method "winner" is not defined on the instance but referenced during render"
I'm guessing is because the function isn't running and assigning the value to winner? Can someone let me know where I'm going wrong?
Component code below
<template>
<div class="container-flex">
<div class="wrapper">
<div class="entries">
<div class="entries__header">
<div class="entries__header__title">
<p>Competition Entries</p>
</div>
<div class="entries__header__search">
<input
type="text"
name="Search"
class="input input--search"
placeholder="Search..."
v-model="search">
</div>
</div>
<div class="entries__content">
<ul class="entries__content__list">
<li v-for="entry in filteredEntries">
{{ entry.name }}
</li>
<li class="winner">{{ winner }}</li>
</ul>
</div>
<add-entry :entries.sync="entries"/>
</div>
<button
@click="pickWinner">Pick Winner</button>
</div>
</div>
</template>
<script>
import addEntry from '@/components/add-entry.vue'
export default {
name: 'entry-list',
components: {
addEntry
},
data: function() {
return {
search: '',
entries: [
{
name: 'Geoff'
},
{
name: 'Stu'
},
{
name: 'Craig'
},
{
name: 'Mark'
},
{
name: 'Zoe'
}
],
}
},
methods: {
pickWinner() {
winner: this.entries[Math.floor(Math.random() * this.entries.length)]
}
},
computed: {
filteredEntries() {
if(this.search === '') return this.entries
return this.entries.filter(entry => {
return entry.name.toLowerCase().includes(this.search.toLowerCase())
})
}
}
}
</script>
winnerproperty in your data object. Also yourpickWinner()function seems wrong