我目前正在传递一组道具,"propSet";,到子组件。道具被计算出来,检测到一个"编辑模式"布尔值,并相应地改变。
"propSet";定义以下表单输入道具:颜色、填充、密集、轮廓、只读、必需和规则。
所有道具工作,除了";规则";。每次子组件使用"editMode==true"配置时,我都会在控制台中收到以下错误消息;propSet":
[Vue warn]:无效道具:道具的类型检查失败;规则";。预期数组,得到对象
我尝试了很多东西,但特别是,我尝试过:
-
为规则数组的子组件添加类型验证
props: ['propSet'] //original
props: { propSet: Array } //updated
-
使用Object.entries((将对象更改为数组
var rulesSet = Object.entries(this.rules)
-
更改规则-尝试以几种不同的方式配置规则
//original rules: { required: (v) => !!v || "This field is required", autoComplete: (v) => !!(v && v.length) || "This field is required", },
//updated rules: [{ required: (v) => !!v || "This field is required"},{ autoComplete: (v) => !!(v && v.length) || "This field is required", }],
我已经阅读了Props的文档好几次了,在那里我还没有看到我的问题的答案(除非我忽略了它(。我还阅读了在Vuetify API中可以找到的与规则数组相关的文档。
我还读过不少关于Vue.js、道具和组件的SO问题。
我想我可能只是错过了一些显而易见的东西。
为了简洁起见,这里有一个带有不同道具集的代码笔,它演示了这个问题:
通过规则作为道具
rules
道具应该是一个数组:
Vuetify包括通过规则道具进行的简单验证。道具接受类型为
function
、boolean
和string
的混合数组。当输入值更改时,将验证数组中的每个元素。函数将当前v模型作为参数传递,并且必须返回true
/false
或包含错误消息的string
。
请参阅:文本字段组件-Vuetify
但是,在parent
的数据中,您将rules
定义为具有验证函数的对象(而不是包含这些函数的数组(:
rules: {
required: (v) => !!v || "This field is required",
autoComplete: (v) => !!(v && v.length) || "This field is required"
}
如果您将其更改为以下内容,它应该可以工作:
rules: [
(v) => !!v || "This field is required",
(v) => !!(v && v.length) || "This field is required"
]
请注意,在这两个版本中,都声明了匿名函数。如果你想保留函数名称以供参考,你可以使用这样的命名函数:
rules: [
function required(v) { return !!v || "This field is required"; },
function autoComplete(v) { return !!(v && v.length) || "This field is required"; }
]