【发布时间】:2021-02-15 11:18:40
【问题描述】:
我正在为我的 VueJS 应用程序创建一个数字文本输入,它将允许在文本字段中评估 math.js 表达式。这个想法是,在模糊或在文本框中按 Enter 时,如果可能,将对表达式进行评估。
<template>
<v-text-field
v-model="localValue"
@blur="onBlur"
@keydown="onKeydown"
/>
</template>
<script>
import { create, all } from 'mathjs'
const math = create(all)
export default {
name: "NumericTextField",
props: ["value"],
data () {
return {
localValue: this.value
}
},
methods: {
onKeydown (e) {
if (e.key === "Enter") {
this.compute()
}
},
onBlur () {
this.compute()
},
compute () {
try {
const result = math.evaluate(this.localValue)
this.$emit("input", result)
} catch (e) {
console.log(e)
}
},
},
}
</script>
我看到数据通过 emit 语句传播出去。但是,新值一旦计算出来,就不会回流到文本字段的 v-model 中。我已经在我的数据函数上尝试了一个 console.log,并且在发射完成后我实际上看到了新的 this.value。因此,如果我在字段中键入 1+1 并按 Enter,我将看到发射显示 2 的 console.log,并且重新计算的数据也显示 this.value 现在是 2。但是,视觉输出是 v-text-field 的数据没有变化,文本框中仍然显示1+1。这是为什么呢?
【问题讨论】:
标签: vue.js vuetify.js