Vue-将规则数组传递给子组件



我目前正在传递一组道具,"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问题。

我想我可能只是错过了一些显而易见的东西。

为了简洁起见,这里有一个带有不同道具集的代码笔,它演示了这个问题:

通过规则作为道具

Vuetify的Text字段组件的rules道具应该是一个数组:

Vuetify包括通过规则道具进行的简单验证。道具接受类型为functionbooleanstring的混合数组。当输入值更改时,将验证数组中的每个元素。函数将当前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"; }
]

最新更新