Vuetify-如何在表单规则中访问数据

时间:2018-11-18 23:30:51

标签: vue.js vuetify.js

我可以访问rule中的数据元素吗?

Here is my code running

我正在尝试以Vuetify形式翻转文本字段规则上的data元素的值。

规则本身可以正常工作,但是我无法访问数据元素,出现此错误:

TypeError: Cannot set property 'disabled' of undefined

这是我的代码:

data: function() {
return {
  disabled: false,
  rules:{
    sellerId(value){
      if(value.length == 0){
        this.disabled = true;
        return "What are you trying to do here?";  
      }
      else{
        return true;
      }
    }
  },

我在做什么错了?

3 个答案:

答案 0 :(得分:11)

rules是一个函数数组,如果您需要该函数能够访问data属性,则可以将它们定义为组件方法:

data: function () {
  return {
    disabled: false
  }
},
methods: { 
  sellerId (value) {
    if (value.length === 0) {
      this.disabled = true;
      return "What are you trying to do here?";  
    } else {
      return true;
    }
  }
}

然后在您的Vuetify组件中:

<v-text-field :rules="[ sellerId ]"></v-text-field>

答案 1 :(得分:1)

虽然this对规则函数不可用,但是您可以通过将vue实例分配给变量来实现此目的,这将通过闭包将其带入范围。

vm = new Vue({
    el: '#app',
    data: () => ({
        disabled: true,
        rules: [
            value => {
                if (value.length == 0) {
                    vm.disabled = true;
                    return "What are you trying to do here?";  
                }
                else {
                    return true;
                }
            }
        ],
'''

答案 2 :(得分:1)

尝试将rules定义为computed属性:

data: function() {
    return {
      disabled: false,
      ...
    }
  },
  computed: {
    sellerIdRules() {
      return [
         (v) => {
        if (value.length == 0) {
          this.disabled = true;
          return "What are you trying to do here?";
        } else {
          return true;
        } ]
      }
    }
  }