无法读取未定义的 属性“__isVuelidateAsyncVm”

Cannot read property '__isVuelidateAsyncVm' of undefined

这是我的代码 codesandbox,我这里有一个带有验证的表单和“计算”按钮,该按钮在所有字段都有效之前处于禁用状态。但出于某种原因,我收到错误 Cannot read property '__isVuelidateAsyncVm' of undefined .

首先是一些评论,很高兴您提供了一个沙箱,但是您的问题本身应该包含相关代码以重现该问题。如果(当)link 死亡时,这个问题就变得毫无用处。

进行一些调试以真正找到导致此错误的字段。通过一个接一个地删除字段,我注意到导致您出现问题的是性别字段。所以仔细观察 inArray,你的自定义验证器,我注意到你没有返回任何东西,这导致验证失败。将 return 添加到您的 inArray:

const inArray = (value, vm) => {
  // add return!
  return vm.items.some(gender => value.indexOf(gender) !== -1);
};

PS,作为提示,尝试进行一些调试以缩小问题范围,您可能已经自己解决了这个问题:)

您问题的其余相关代码:

<v-select
   v-model="user.gender.value"
   :items="user.gender.items"
   label="Gender"
   :solo="true"
   :error-messages="userGenderErrors"
   append-icon
></v-select>

脚本:

validations: {
  user: {
    gender: {
      value: {
        required,
        inArray
      }
    },
  }
},

FIXED SANDBOX

我遇到了同样的问题,所以感谢 Bogdan 的问题和 AT82 的回答,它真的帮助了我:)

我想补充一下我的情况,我有这个代码:

validations() {
  return {
    VaccineUpload: {
      vaccines: {
        $each: {
          isValidInput: (vaccine) => {
            const { brand, date } = vaccine
            return (!brand && !date) || (brand && date)
          }
        }
      }
    },

而 return 语句 return (!brand && !date) || (brand && date) 将 return null 而不是布尔值,这会产生相同的错误。我的解决方案是将代码更改为:

return !!((!brand && !date) || (brand && date))

因此请始终确保您return使用布尔值来成功使用验证。