Javascript/Vue3 - Mixins - 默认返回 'null'

标签 javascript vue.js vuejs3 vue-mixin

我正在构建一个基本的“必需”表单验证函数。这是函数:

JS:

export default {
    methods: {
        required(string) {
            if (!string) {
                return 'This field is required!'
            }
        }
    }
}

HTML:

<input id="username"
  v-model="credentials.username"
  type="text"
  name="username"
/>
<span>{{ required(credentials.username) }}</span>

上面的效果很好。如果我开始输入,返回的值变为空。如果我清空输入,返回值会按预期返回,“此字段为必填项”。

我的问题是,如何将值返回为 null/blank 以开始?预期流量为:

  • 返回值为 null/空白开始
  • 用户开始输入,没有任何变化,因为 string.length != 0
  • 用户删除所有字符,导致string.length == 0,导致返回值为'This field is required!'

最佳答案

一种解决方案是使用 input -事件处理程序(为输入中的每个新值调用)设置一个标志以指示该字段是“脏的”。然后根据标志有条件地渲染验证结果(<span>):

  1. 声明一个名为 "dirty" 的数据属性:

    export default {
      data() {
        return {
          dirty: false,
        }
      }
    }
    
  2. 在模板中,添加 input -<input> 上的事件处理程序设置 dirty标志:

    <input @input="dirty = true">
    
  3. 此外,有条件地呈现 <span>基于 dirty 的字段:

    <span v-if="dirty">{{ required(credentials.username) }}</span>
    

demo

关于Javascript/Vue3 - Mixins - 默认返回 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67944867/

相关文章:

javascript - Bootstrap 导航栏中的模式

javascript - 从 jQuery ajax 获取 php 数据,无需 html 表单

javascript - Vue 复制对象到本地数据

vue.js - 我怎么能在组合 api 中观看 Prop ?

javascript - JavaScript 中的跨域请求与 jQuery 的 JSONP

javascript - 将焦点转移到 keydown - 仅 JavaScript - 无 jQuery

javascript - 移动内容时 Vue 进行转换

vue.js - 在组件中加载 Javascript 文件

typescript - 如何在 Vue 3 组合 api 中创建 axios 插件

vue.js - 如何在 &lt;script setup> 中注册组件?