【问题标题】:Vuejs input with v-model not updating when I sanitize the input on a watch handler当我清理手表处理程序上的输入时,带有 v-model 的 Vuejs 输入未更新
【发布时间】:2021-03-16 10:43:25
【问题描述】:

我使用的是 Vue 2.6,我在清理输入时遇到了一个奇怪的问题。

我有一个用于实际输入的自定义组件,基本上如下(我添加了一些与此处无关的样式等):

<template>
  <input :name="name" :value="value" @input="(e) => onInput(e.target.value)" />
</template>

其中onInput 只是发出input 事件,valuename 都是道具。

我可以在我的页面上使用这个组件:

<Field v-model="field" name="field" />

它在大多数情况下都非常有效。

问题开始是因为我需要从输入中删除所有小写和白写字符。所以我在field 上创建了一个手表处理程序:

onFieldChange(field) {
  this.field = field.replace(/[\sa-z]/gi, '')
}

现在,如果我开始输入像 test 这样的无效字符并检查 Vue 组件,我可以看到 field 是正确的 '',因为所有无效字符都被删除了,但我一直看到 @ 987654332@ 里面的输入。

如果我还添加了一个有效字符,例如 T => testT,那么它会正确呈现为 T

我很清楚问题的根源是什么:我的Field 组件在它的 props 中没有看到任何差异('value' 保持不变,一个空字符串),因此它不会重新渲染。但我不明白我该如何解决它,你有什么想法吗?谢谢

【问题讨论】:

    标签: javascript vue.js vue-component


    【解决方案1】:

    只需修改 nextTick 中的字段值即可。

    onFieldChange(field) {
      this.$nextTick(()=>{
        this.field = this.field.replace(/[\sa-z]/gi, '')
      })
      // this.field = field.replace(/[\sa-z]/gi, '')
    }
    

    jsfiddle

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 2021-07-27
      • 2020-01-10
      • 1970-01-01
      • 2018-06-13
      • 2021-09-04
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多