首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合使用维甲酸酯

联合使用维甲酸酯
EN

Stack Overflow用户
提问于 2020-06-29 13:39:50
回答 1查看 1.5K关注 0票数 1

我用的是维甲酸酯和香根素。我有一些使用相同错误消息处理程序的v-文本字段。

在显示错误消息的处理程序函数中,我希望获得导致错误的字段文本,以便只使用处理程序函数,而不是创建许多类似的函数。

有办法吗?

代码语言:javascript
复制
<v-text-field
class="purple-input"
label="Data"
type="date"
v-model="preco_proced.data_valor1"
:error-messages="dataValorErrors"
persistent-hint
required
></v-text-field>

<v-text-field
class="purple-input"
label="Data"
type="date"
v-model="preco_proced.data_valor2"
:error-messages="dataValorErrors"
persistent-hint
required
></v-text-field>

//error-messages
dataValorErrors() {
      const errors = [];
      //here I need the correct field:data_valor1, data_valor2 .....  
      if (!this.$v.preco_proced.data_valor??????.$dirty) return errors;
      !this.$v.preco_proced.data_valor???????.required &&
        errors.push("Data é obrigatório");
      return errors;
},
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 13:51:17

是的,我们能做到。

假设我们要验证firstNameemail,并且validations选项的设置如下:

代码语言:javascript
复制
validations: {
  firstName: { required },
  email: { required, email },
},

在模板中,我们需要更新v-text-field如下:

代码语言:javascript
复制
<v-text-field 
  label="First name*" 
  v-model.trim="firstName" 
  required 
  :error-messages="getErrors('firstName', $v.firstName)" 
  @blur="$v.firstName.$touch()">
</v-text-field>

<v-text-field 
  label="Email*" 
  required 
  v-model.trim="email" 
  :error-messages="getErrors('email', $v.email)" 
  @blur="$v.email.$touch()">
</v-text-field>

现在只需要为js代码添加getErrors方法,如下所示:

代码语言:javascript
复制
methods: {
  validate() {
    this.$v.$touch();
    if (this.$v.$invalid) {
      return;
    }
  },
  getErrors(name, model) {
    const errors = [];
    if (!model.$dirty) return errors;
    switch (name) {
      case "firstName":
        !model.required && errors.push("First name is required.");
        break;
      case "email":
        !model.email && errors.push("Must be valid e-mail");
        !model.required && errors.push("E-mail is required");
        break;
      default:
        break;
    }
    return errors;
  }
}

您还可以根据需要为其他文本字段添加多个开关情况。我希望这个示例将有所帮助。

演示:

代码语言:javascript
复制
Vue.use(window.vuelidate.default)
const { required, email } = window.validators

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  validations: {
    name: { required },
    email: { required, email },
  },
  data() {
    return {
      name: '',
      email: '',
    }
  },
  methods: {
    validate() {
      this.$v.$touch();
      if (this.$v.$invalid) {
        return;
      }
    },
    getErrors(name, model) {
      const errors = [];
      if (!model.$dirty) return errors;
      switch (name) {
        case "name":
          !model.required && errors.push("First name is required.");
          break;
        case "email":
          !model.email && errors.push("Must be valid e-mail");
          !model.required && errors.push("E-mail is required");
          break;
        default:
          break;
      }
      return errors;
    }
  }
})
代码语言:javascript
复制
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuelidate@0.7.5/dist/vuelidate.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuelidate@0.7.5/dist/validators.min.js"></script>

<div id="app">
  <v-app>
    <v-main>
      <v-container>
        <form>
          <v-text-field v-model="name" :error-messages="getErrors('name', $v.name)" :counter="10" label="Name" required @input="$v.name.$touch()" @blur="$v.name.$touch()"></v-text-field>
          <v-text-field v-model="email" :error-messages="getErrors('email', $v.email)" label="E-mail" required @input="$v.email.$touch()" @blur="$v.email.$touch()"></v-text-field>
          <v-btn class="mr-4" @click="validate">submit</v-btn>
        </form>
      </v-container>
    </v-main>
  </v-app>
</div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62639432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档