...

/

Component State and Events

Component State and Events

Learn how to manage the component state and handle events in Vue using TypeScript.

Component state

The properties that a component exposes to a parent component are read-only. This means that only the parent component can change these properties and that the flow of data is one-way, from parent to child. If our component needs to maintain its own state and update an internal property, such as the value from an input control, we will need a place to store this state. Vue components use a function named data that returns a structure for storing the internal state.

Let’s update our HelloWorld component and introduce an internal property named myText as follows:

Press + to interact
<template>
<p>Hello World</p>
<p>msg prop = {{ msg }}</p>
<input type="text" v-model="myText" />
<button v-on:click="clicked()">Submit</button>
</template>
<script lang="ts">
import { Options, Vue } from 'vue-class-component';
@Options({
props: {
msg: String
}
})
export default class HelloWorld extends Vue {
msg!: string;
myText!: string;
data() {
return {
myText: this.msg
}
}
clicked() {
console.log(`this.myText = ${this.myText}`);
}
}
</script>

Here, we have made a number of changes to our component:

  • Firstly, we have introduced an input element within our HTML template on line 4 that is using the v-model attribute to bind the value entered in the input control to a property named myText. This binding is a two-way binding, so the value shown on the screen and the internal value of the myText property are kept synchronized.

  • Secondly, we have made is to introduce a button element on line 5, and we have set the v-on:click attribute to a method named clicked(). The v-on attribute is the method that Vue uses to trap DOM events, and in this case, we are trapping the click event.

  • Thirdly, we have introduced a class property named myText of type string on the HelloWorld class on line 19.

  • The fourth change we have ...