Har*_*ari 15 vue.js electron vue-cli-4 ecmascript-2020
我已经使用 @vue/cli-service 4.2 创建了 vue 和电子应用程序,因为我面临着可选链接的问题。
我不能用?用于验证条件,如 (@babel/plugin-proposal-optional-chaining)
例如。a?.b?.c 这意味着它检查天气 a 是否存在然后检查 b 否则返回 false 与 angular 中的模板表达式相同。
任何人都知道如何在 vuejs 中配置可选链。
Jun*_*our 11
它用于Babel启用Optional Chaining(?.)和Nullish Coalescing(??)许多新的 ES 语法Vue.js SFC。

npm install vue-template-babel-compiler --save-dev
Run Code Online (Sandbox Code Playgroud)
// vue.config.js
module.exports = {
chainWebpack: config => {
config.module
.rule('vue')
.use('vue-loader')
.tap(options => {
options.compiler = require('vue-template-babel-compiler')
return options
})
}
}
Run Code Online (Sandbox Code Playgroud)
// nuxt.config.js
export default {
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
loaders: {
vue: {
compiler: require('vue-template-babel-compiler')
}
},
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
支持Vue-CLI, Nuxt.js, Webpack,任何环境使用vue-loader v15+。
一个快速更新是 Vue 3 捆绑了对可选链接的支持。
要进行测试,您可以尝试编译以下 Vue 组件代码。
<template>
<div id="app" v-if="user?.username">
@{{ user?.username }} - {{ fullName }} <strong>Followers: </strong>
{{ followers }}
<button style="align-self: center" @click="followUser">Follow</button>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'App',
props: {
test: Object
},
data() {
return {
followers: 0,
user: {
id: 1,
test: {},
username: '_sethAkash',
firstName: undefined,
lastName: 'Seth',
email: 'sethakash007@gmail.com',
isAdmin: true
}
}
},
computed: {
fullName(): string {
//
return `${this?.test?.firstName} ${this?.user?.lastName}`
}
},
methods: {
followUser: function () {
this.followers += 1
}
},
watch: {
followers(newFollowerCount, oldFollowerCount) {
if (oldFollowerCount < newFollowerCount) {
console.log(`${this?.user?.username} has gained a follower!`)
}
}
},
mounted() {
this.followUser()
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
根据这里对某个问题的评论
您可以创建一个全局 mixin 并使用该eval函数来评估表达式。
例子:
Vue.mixin({
methods: {
$evaluate: param => eval('this.'+param)
}
});
Run Code Online (Sandbox Code Playgroud)
在模板中:
<template>
<p>{{ $evaluate('user?.name') }}</p>
</template>
Run Code Online (Sandbox Code Playgroud)
他们还补充说,它可能并不完美:
尽管它仍然无法替代真正的运算符,尤其是当您多次出现它时
如上所述,使用eval可能会带来一些意想不到的问题,我建议您使用计算属性代替。
在证监会:
<template>
<p>{{ userName }}</p>
</template>
<script>
export default {
data(){
return {
user: {
firstName: 'Bran'
}
}
},
computed: {
userName(){
return this.user?.firstName
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)