Разберитесь с проверкой формы в element-ui
(Сначала поставьте себе лайк b( ̄▽ ̄)d)
основное использование
Пример парсинга официальной кастомной валидации
Просто посмотрите официальные документы для базового использования.Здесь я буду разбирать официальные документы.
Официальный документ должен написать такой пример(Чуть длиннее, упрощу, следующим образом)
это вид
<el-form :model="ruleForm" :rules="rules">
<el-form-item label="密码" prop="pass">
<el-input v-model="ruleForm.pass"></el-input>
</el-form-item>
</el-form>
Вы можете узнать, увидев код выше, то есть использоватьel-form, а затем используйтеel-form-item
el-formНеобходимо передать два параметра,modelа такжеrules, modelявляется объектом данных формы,rulesДа Правила проверки формы.
el-form-itemнужно передать параметр(Это самый основной параметр, конечно есть и другие),propиспользуется для перепискиrulesзначение внутри
правило:
- Значение, используемое в форме, должно быть в модели, чтобы его можно было считать соответствующим спецификации.
- правила соответствуют реквизиту
- После того, как prop соответствует правилам, значение в rules соответствует
model[prop] - Если в кб есть ошибка, то она будет извлечена и отображена, если пусто, то проверка пройдена.
Итак, официальный код js выглядит следующим образом
js (упрощенный)
ruleForm: {
pass: '',
},
rules: {
pass: [
{
validator: (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入密码'));
}
callback();
},
trigger: 'blur'
}
],
}
Значение здесь соответствует третьему правилу вышеуказанного правила
Тогда правилу cb соответствует четвертое правило
На этом мы закончили чтение официальных документов. Еще один апи внизу слева. Так что о проверке мы используем этот способ достаточно.
Расширенное использование
Сцена 1
Но если это вложенная структура, то есть представление длинное вот так
<el-form :model="form" :rules="rules">
<el-form-item v-for="(item, index) in form.list" :key="item.id" label="章节" prop="chapter">
<el-input v-model="item.name"></el-input>
</el-form-item>
</el-form>
Что делать, если мы хотим проверить данные в нем.
Всего два метода
- вложенная форма
- prop использует точечные выражения
Первый слишком ограниченный и более хлопотный, да и сбросить данные хлопотнее, так что проходите.
Во-вторых, это
:prop[`list[${index}].name`]
Это можно проверить, но мы обнаружили, что прямая установка не действует. В это время мы используем новую вещь,rules, это также может использовать правила.
Модифицированный код выглядит следующим образом
// view 部分
<el-form :model="form" :rules="rules">
<el-form-item v-for="(item, index) in form.list" :key="item.id" label="章节" :rules="rules['catpter_name'][0]" :prop[`list[${index}].name`]>
<el-input v-model="item.name"></el-input>
</el-form-item>
</el-form>
// js部分
form: {
list: [
{name: ''}
]
},
rules: {
catpter_name: [
{
validator: (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入章节名称'));
}
callback();
},
trigger: 'blur'
}
],
}
Теоретически это может(Этот код написан прямо от руки на наггетсах, может и не запуститься, но смысл достигнут)
НО, в это время, сказал продукт, я хочу проверить не только имя, но и самый внешний слой, чтобы проверить, было ли проверено имя в нем. Поговорим о втором сценарии.
сцена вторая
Это не просто описать, пришлю фото, не знаю, смогу ли внятно описать
Если я не понимаю, что я имею в виду, пришлите другой код
Сейчас
На этот раз нам нужно пойти на хитрость, так какpropсвязаны внутриrulesНе могу, тогда используйel-form-itemвнутриrulesатрибут, напишите функцию в атрибуте и передайте параметры в прошлом.
так
:rules="list_item_rule(item)" prop="list_item_prop_key"
ЗапомнитьpropОн не может упасть, иначе он не будет работать, хотя сейчас он не имеет смысла существовать. Значение в prop рекомендуется писать_, а затем добавьте еще одну форму_Атрибуты.
правила:
(item) => ({
required: true,
validator: (rule, _, cb) => {
// item 就是数据啦,可以校验了
}
})
-- над --