You can add computed properties to a component to calculate a property on the fly. The benefit of this over invoking a method is that computed properties are cached based on their dependencies.
<template>
<section class="container">
<item-description></item-description>
<h1 class="title">
{{message | capitalize}}
</h1>
<button @click="changeMessage" class="button">Change Message</button>
<hr>
<section>
<h2>Mouse event</h2>
<div>{{counter}}</div>
<div @mouseover="inc">Mouse over here to change counter</div>
</section>
<section>
<h2>Keyboard events</h2>
<form @submit.prevent="submit">
<input type="text"
v-model="firstName"
@keyup.enter="submit"
@keyup.alt.ctrl.shift.down="keyeventHandler"/>
<button v-bind:disabled="buttonDisabled">{{buttonText}}</button>
</form>
<div>
{{key}}
</div>
</section>
</section>
</template>
<style scoped>
.title
{
margin: 50px 0;
}
</style>
<script>
import ItemDescription from '../components/item-description';
export default {
data() {
return {
message: 'this is my vue!',
counter: 0,
key: "",
firstName: "",
buttonText: "Add"
}
},
computed: {
buttonDisabled: function() {
return this.firstName == "";
}
},
components: {
ItemDescription
},
filters: {
capitalize(value) {
return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
}
},
methods: {
changeMessage() {
this.message = "Updated message here!"
},
inc() {
this.counter += 1;
},
keyeventHandler() {
this.key = "Ctrl + alt + shift + down is clicked"
},
submit() {
console.log("form is submitted, the value is", this.firstName);
}
}
}
</script>