Support optional chaining in vuejs

Hardik Kothari picture Hardik Kothari · May 13, 2020 · Viewed 10.8k times · Source

I have created vue and electron app using @vue/cli-service 4.2 in that I am facing a issue of optional chaining.

I can't use ? for validating the condition like (@babel/plugin-proposal-optional-chaining)

eg. a?.b?.c its means it check weather a exist then check for b otherwise return false same as template expression in angular.

Any one have idea how to configure optional chaining in vuejs.

Answer

Edmund1645 picture Edmund1645 · May 17, 2020

According to this comment on an issue here

You could create a global mixin and use the eval function to evaluate the expression.

Example:

Vue.mixin({
  methods: {
    $evaluate: param => eval('this.'+param)
  }
});

In the template:

<template>
  <p>{{ $evaluate('user?.name') }}</p>
</template>

They also added that it might not be perfect:

Although it's still no substitute for the real operator, especially if you have many occurrences of it


Edit

As stated above, using eval may bring some unintended problems, I suggest you use a computed property instead.

In the SFC:

<template>
  <p>{{ userName }}</p>
</template>

<script>
export default {
  data(){
    return { 
      user: {
        firstName: 'Bran'
      }
    }
  },
  computed: {
    userName(){
      return this.user?.firstName
    }
  }
}
</script>