vue.js - 将 ValidationObserver 包裹在 v-for 循环周围
问题描述
我有一个 v-for 循环,它允许我向表单动态添加新字段。此循环位于一个选项卡中,我需要在进入表单的下一部分之前对其进行验证。当我将 v-for 放在我的验证观察者中时,似乎没有任何渲染。还有另一种方法可以做到这一点吗?
我正在使用 VeeValidate 3
<template>
<div>
<b-card class="mb-3">
<ValidationObserver :ref="'contact_obs'" v-slot="{ invalid }">
<div
v-for="(contact, index) in this.applicant.contacts"
:key="contact.id"
role="tablist"
>
<b-form-row>
<BTextInputWithValidation
rules="required"
class="col-md-4"
:label="
$t('contact_name', { name: applicant.contacts[index].title })
"
:name="$t('contact_name')"
v-model="applicant.contacts[index].name"
description
placeholder
/>
<BTextInputWithValidation
rules
class="col-md-4"
:label="$t('contact_title')"
:name="$t('contact_title')"
v-model="applicant.contacts[index].title"
description
placeholder
/>
<BTextInputWithValidation
rules
class="col-md-3"
:label="$t('contact_email_address')"
:name="$t('contact_email_address')"
v-model="applicant.contacts[index].email"
description
placeholder
/>
<b-button
variant="outline-danger"
class="float-right mt-4 mb-4 ml-3"
v-on:click="deleteContact(index)"
>
<span class="fas fa-user-minus"></span>
</b-button>
</b-form-row>
</div>
</ValidationObserver>
<b-button
variant="outline-success"
class="float-right mt-4 mb-4 ml-3"
v-on:click="addContact"
>
<span class="fas fa-user-plus"></span>
</b-button>
</b-card>
</div>
</template>
<script>
import { ValidationObserver } from 'vee-validate'
import VeeValidate from 'vee-validate'
import BTextInputWithValidation from './inputs/BTextInputWithValidation'
let id = 10
export default {
components: { ValidationObserver, BTextInputWithValidation },
mounted() {},
data: function() {
return {
applicant: {
contacts: [
{
id: '1',
name: '',
title: 'Primary Principal',
email: ''
},
{
id: '2',
name: '',
title: 'Secondary Principal',
email: ''
},
{
id: '3',
name: '',
title: 'Accounts Receivable',
email: ''
}
]
}
}
},
methods: {
addContact: function(params) {
this.applicant.contacts.push({
id: id,
name: '',
title: '',
email: ''
})
id++
},
deleteContact: function(index) {
this.$delete(this.applicant.contacts, index)
},
validate() {
const isValid = this.$refs.contact_obs.validate()
if (isValid) {
this.$emit('on-validate', this.$data, isValid)
}
return isValid
// return true
}
}
}
</script>
<style lang="scss" scoped></style>
解决方案
我相信问题出在这里:
v-for="(contact, index) in this.applicant.contacts"
一般来说,您应该避免使用this.
前缀来访问模板中的属性,但通常它没有害处。这是它确实会破坏某些东西的情况之一。this
不引用作用域插槽内的正确对象。
我很惊讶您没有在控制台中看到错误。
推荐阅读
- python - 类型“类型”的参数不可迭代。如何?
- tfs - 如何在 TFS 2017 上运行项目备份
- postgresql - Quarkus:数据源'
':致命:主机没有 pg_hba.conf 条目 - swift - 外部模型对象的 SwiftUI 数据流和 UI 更新,其值发生变化但 id 相同
- arrays - FreeMarker 模板语言 (FTL):拆分多值 XML 字段元数据以对各自的值进行分组
- spring - 在springMVC中反序列化嵌套的Kotlin对象
- c# - C# UWP VS2017 ComboBox 事件错误:无法激活 Windows 商店应用程序
- php - preg_replace 格式转换为输出日期
- actions-on-google - 我的谷歌操作需要时间,延迟大约 10 秒。如何处理延迟问题?
- python - 在 AWSEB 命令行上部署 django 应用程序时,如何修复 502 Bad Gateway NGINX 错误?