Skip to content
Advertisement

Vue.js – How to properly watch for nested data

I’m trying to understand how to properly watch for some prop variation. I have a parent component (.vue files) that receive data from an ajax call, put the data inside an object and use it to render some child component through a v-for directive, below a simplification of my implementation:

JavaScript

… then inside <script> tag:

JavaScript

item objects are like this:

JavaScript

Now, inside my child “player” component I’m trying to watch for any Item’s property variation and I use:

JavaScript

It works but it seems a bit tricky to me and I was wondering if this is the right way to do it. My goal is to perform some action every time prop changes or myArray gets new elements or some variation inside existing ones. Any suggestion will be appreciated.

Advertisement

Answer

You can use a deep watcher for that:

JavaScript

This will now detect any changes to the objects in the item array and additions to the array itself (when used with Vue.set). Here’s a JSFiddle: http://jsfiddle.net/je2rw3rs/

EDIT

If you don’t want to watch for every change on the top level object, and just want a less awkward syntax for watching nested objects directly, you can simply watch a computed instead:

JavaScript

Here’s the JSFiddle: http://jsfiddle.net/oa07r5fw/

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement