DEV Community

flavio ⚡️🔥
flavio ⚡️🔥

Posted on • Originally published at flaviocopes.com on

Vue.js Watchers

I'm working on a Vue.js course. If you're interested in learning Vue, get on the list to get a free 120+ pages ebook about the Vue fundamentals tomorrow!

A watcher is a special Vue.js feature that allows you to spy on one property of the component state, and run a function when that property value changes.

Here’s an example. We have a component that shows a name, and allows you to change it by clicking a button:

<template> <p>My name is {{name}}</p> <button @click="changeName()">Change my name!</button> </template> <script> export default { data() { return { name: 'Flavio' } }, methods: { changeName: function() { this.name = 'Flavius' } } } </script> 
Enter fullscreen mode Exit fullscreen mode

When the name changes we want to do something, like printing a console log.

We can do so by adding to the watch object a property named as the data property we want to watch over:

<script> export default { data() { return { name: 'Flavio' } }, methods: { changeName: function() { this.name = 'Flavius' } }, watch: { name: function() { console.log(this.name) } } } </script> 
Enter fullscreen mode Exit fullscreen mode

The function assigned to watch.name can optionally accept 2 parameters. The first is the new property value. The second is the old property value:

<script> export default { /* ... */ watch: { name: function(newValue, oldValue) { console.log(newValue, oldValue) } } } </script> 
Enter fullscreen mode Exit fullscreen mode

Watchers cannot be looked up from a template, like you can with computed properties.

I'm working on a Vue.js course. If you're interested in learning Vue, get on the list to get a free 120+ pages ebook about the Vue fundamentals tomorrow!

Top comments (0)