当使用多个规则时,规则应该返回一个字符串或布尔值,而不是接收到的“对象”

Posted

技术标签:

【中文标题】当使用多个规则时,规则应该返回一个字符串或布尔值,而不是接收到的“对象”【英文标题】:Rules should return a string or boolean, received 'object' instead when using more then one rule 【发布时间】:2021-10-20 21:51:06 【问题描述】:

我正在尝试验证 vuetify v-text-field。我有两条规则,一条用于必填字段,另一条用于验证用户只输入正数。但它不起作用,我收到此错误: [Vuetify] 规则应该返回一个字符串或布尔值,而不是接收到的“对象”。 这就是我在 vue 文件中定义规则的方式:

rules: 
        select: [(v) => !!v || "Item is required"],
    
        emailRules: [
            v => !!v || 'E-mail is required',
            v => /.+@.+\..+/.test(v) || 'E-mail must be valid',
        ],
        phoneRules: [
            v => /(\+1)?\s?\(?\d3\)?-?\s?\d3-\d4/.test(v) || 'Phone Number must be valid',
            v => v.length <= 15 || 'Phone Number must be valid'
        ],
        numberRules: [
            v => /\d+\.?\d*/.test(v) || 'You have to enter a number',
            v => v>0 || 'You have to enter a positive number'
        ]
    ,

这是视图:

<v-text-field
   v-if="loggedUser.role_id == 1"
   v-model="editedItem.commission"
   label="Commission (%) *"
   required
   :rules="[rules.select, rules.numberRules]"
></v-text-field>

如果我单独使用它们,它们可以正常工作,但是如果我将它们都放在一起,它们都不起作用。

【问题讨论】:

【参考方案1】:

您应该使用扩展运算符连接规则以获得规则数组:

:rules="[...rules.select, ...rules.numberRules]" 

【讨论】:

感谢您的回答。如果我这样写:rules="[...rules.select, ...rules.numberRules]" ,那么它会给我这个错误:TypeError: rules.numberRules is not iterable 但它在这个例子中有效codepen.io/boussadjra/pen/wvdLbMb

以上是关于当使用多个规则时,规则应该返回一个字符串或布尔值,而不是接收到的“对象”的主要内容,如果未能解决你的问题,请参考以下文章

函数的返回值作用域变量的读写规则

这些比较规则,你未必都知道

查看安全策略

当应该为真时,Android Studio 改造响应返回布尔值为假

==与===

RewriteRule 当替换字符串不是文件路径而是应该由下一个规则处理的 URL 时