How to use the default value for an undefined object property in VueJS interpolation?

How to use the default value for an undefined object property in VueJS interpolation? My datais a computed variable and undefined first before being selected selectedDataIdin selectbox, so vue sends "cannot read the property" grandChild "from undefined" .

PS: I use lodash

<div>
    {{ selectedData.child.grandChild }}
</div>

new Vue({
   data: {
       selectedDataId: null,
       selectedData: {},
       data: [ //array of objects here ]
   },
   computed: {
       selectedData() {
           return _.find(this.data, (d) => {
               return d.id == this.selectedDataId;
           });
       }
   }
});
+4
source share
3 answers

You can use the following template:

{{ selectedData.child && selectedData.child.grandChild || 'default value' }}

It will safely check grandChildand print the "default" if it is false.

+7
source

selectedData, .

, undefined, : v-if="selectedItem" : if (selectedItem)

lodash , Vue :

selectedData() {
    const selectedItem = this.data.filter((item) => {
        return item.id == this.selectedDataId
    })

    return selectedItem.length ? selectedItem[0] : {} // i'd set null here on fail
}

, , null, selectedItem.length 0. , .

+3

try it

selectedData() {
    return _.chain(this.data)
        .find({id: this.selectedDataId})
        .defaults(...default object...)
        .value()
}
0
source

Source: https://habr.com/ru/post/1661260/


All Articles