JavaScript中的“ ReferenceError:未定义”访问变量

时间:2019-05-08 23:11:52

标签: javascript vue.js nativescript

如何通过 runesMetadata.js 访问在 validator.js 中定义的名为- val1090 的变量?

我正在使用nativescript vuejs,在这种情况下,那就是raddataform的元数据。

我遇到了错误[Vue warn]: Error in data(): "ReferenceError: val1090 is not defined" JS: found in JS: ---> <Runes> JS: <NavigationEntry>

runesMetadata.js

import validator from "./validator";

export default {
  mixins: validator,
  data () {
      return {
        makeRuneMetadata: {
          'isReadOnly': false,
          'commitMode': 'OnLostFocus',
          'validationMode': 'Immediate',
          'propertyAnnotations':
          [ 
            {
              'name': 'r_makeRuneSpell',
              'displayName': 'Make rune spell',
              'index': 0,
              'editor': 'Text',
            },
            {
              'name': 'r_mpAbove',
              'displayName': 'If MP above [%]',
              'index': 1,
              'editor': 'Number',
               val1090, // <--------------------------
            },


      }
  }
}

validator.js

const val1090 = {
    'validators': [
        {
            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.',
            }
        },
    ]
  }

export default val1090

**编辑如下**

因此验证器将包含更多这样的对象

onst val1090 = {

            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.'
            }  

};

const val115 = {

    'name': 'RangeValidator',
    'params': {
      'minimum': 1,
      'maximum': 15,
      'errorMessage': 'Value must be between 1-15.'
    }  

};


export default{
    val1090,
    val115
}

在我的组件中,我制作了

created() {
    console.dir(val1090);
  },

所以它给了我

==== object dump start ====
JS: val1090: {
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 10,
JS:     "maximum": 90,
JS:     "errorMessage": "Value must be between 10-90."
JS:   }
JS: }
JS: val115: {
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 1,
JS:     "maximum": 15,
JS:     "errorMessage": "Value must be between 1-15."
JS:   }
JS: }
JS: ==== object dump end ====  

如何仅获取val1090对象包含的内容?我只想要这个

{
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 10,
JS:     "maximum": 90,
JS:     "errorMessage": "Value must be between 10-90."
JS:   }
JS: }

2 个答案:

答案 0 :(得分:0)

您默认导出了val1090,因此调用此

import validator from "./validator"

您声明一个变量validator,其中包含在验证器文件中默认情况下导出的内容。表示validator是包含

的变量
    {
     'validators': [
        {
            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.',
           }
        },
    ]
  }

因此,您应在validator中使用val1090而不是runesMetadata.js,或将第一行更改为

import val1090 from "./validator"

编辑:如果您的验证器有更多对象,则其作用相同。 export default值将包含在您导入的变量中。因此,如果您导出此文件:

export default {
    val1090,
    val115
}

并像这样导入它:

import validator from "./validator"

您基本上使用以下值创建了一个变量variable

validator = {
    val1090: val1090,
    val115: val115
}

访问val1090值可以这样完成:

validator.val1090

答案 1 :(得分:0)

在对象初始值设定项中仅具有一个属性名称,即val1090是新的ES6 + val1090:val1090的“简写”,请参见MDN docs ...为了起作用,必须有一个声明为val1090的变量...在您的代码中不是这种情况

例如

var a = 'foo', b = 42, c = {};
var o = {a, b, c};

有效,因为a,b和c被声明为变量

var a = 'foo', b = 42;
var o = {a, b, c};

失败,因为未声明c