Let's understand another important aspect of computed properties i.e. Caching.

Computed Properties in Vue Instance are dependent on the variables that are reactive, Vue also caches the computed properties and it changes only when the dependencies change.

Let's understand this by the below example.

Consider an application which has two input boxes, one of them is bound to the Vue data property via v-model and another is not.

  <div id="app">
        <input type="text" v-model="name" />
        <input type="text" id="surname" value="Snow" />
        <button @click="saveSurname"> Save Surname </button><br/><br/>
        <output>{{computedFullName}}</output>
    </div>

And here is our Vue instance

    let surname = 'Snow';
    var app = new Vue({
        el: '#app',
        data: {
            name: 'John',
        },
        computed: {
            computedFullName: function () {
                return this.name + ' ' + surname;
            }
        },
        methods: {
            saveSurname: function(){
                surname = this.$el.querySelector('#surname').value;
            }
        }
    });
  • We have defined a variable named surname outside the Vue Instance.
  • We have defined a computed property named computedFullName, that joins the name data property with surname to make it a full Name.
  • We also a method defined saveSurname that gets invoked on clicking the Save Surname button.

Running this application will display two input fields, one for the name and one for the surname, and one button specifically to save the surname.

Running the app, the value of computedFullName is John Snow.

If you change the value of name field, the computed property will change as it's dependency it changing and will show realtime updates.

If you change the value of the surname field and then click on Save Surname. Nothing will happen because the surname field is not reactive and the value of the computed property is now cached.

Now, change the value of name field again. And you'll see that the computedProperty now takes into account the new value of Surname as well.

We just experimented with computed properties to verify that they are cached and are saved in memory until we change the value on which they are dependent on.

Comments