【发布时间】:2021-06-26 17:14:21
【问题描述】:
我有一个复杂的vue组件叫ExamEditor,它本身是由QuestionEditor、ExerciseEditor等子组件组成的。它与一个 exam 对象相关联,该对象包含带有 questions 等的嵌套数组。这是考试编辑器内的布局草图:
<QuestionEditor
v-for="(question, index) in exam.questions"
:id="'q-' + question.id"
:key="'q-' + question.id"
v-model="exam.questions[index]"
:category-choices="exam.questionCategories"
:errors="editorErrors.questionErrors[question.id]"
></QuestionEditor>
<!-- editors for exercises, etc. -->
Here's 完整组件。
我一直在处理将数据验证引入此组件的任务,以确保只能保存一致的“考试”。
由于正在进行一些复杂的验证,我决定推出自己的功能。我的想法是有一个像这样的对象:
{
globalErrors: [],
questionErrors: {
id: [errMsg, ...],
...
},
exerciseErrors: { ... },
questionCategoryErrors: { ... },
exerciseCategoryErrors: { ... }
}
也就是说,编辑器中每个项目类别的对象和给定项目的错误都由其 id 作为对象中的属性进行键入。然后我会将每个错误数组(或undefined)作为道具传递给子组件编辑器以显示消息。
然后我创建了一个用适当的错误字符串填充对象的函数。 This 是函数的样子。
我将此函数放在一个计算属性中,使其始终与数据同步,但问题来了:它总是显示错误。
例如,当我在编辑器中添加新问题时,会弹出错误提示我没有选择类别、问题文本为空等。
我想做的是有办法在适当的时候显示错误。我认为一个好的起点是在单击子组件时运行该函数。例如,我可能会添加一个问题,忘记为其选择一个类别(这是必需的),当我单击“添加问题”继续前进时,该函数会运行并显示错误。
我怎样才能做到这一点?
另外(这可能是基于意见的,但我正在寻找一些输入):这甚至是显示错误的最合适的方式吗?您希望如何以及何时在表单中显示错误?请记住,我的组件中有很多选项,界面非常复杂且边缘杂乱,所以我想保持简单。
【问题讨论】:
标签: javascript forms vue.js validation user-experience