我刚刚接管了一个基于Vue 1.0.26构建的项目,该项目使用MDL作为Node.js模块。 最后一个版本(2年前)仍然可以在生产环境中使用,但是当我在本地重建应用程序时,它将返回此错误:
Select.vue:104 Uncaught (in promise) TypeError: Cannot read property 'hide' of undefined
在这行代码中:
document.querySelector('#' + this.name + '-select .mdl-js-menu').MaterialMenu.hide()
由于我不是Node / Vue Web开发环境的专家,所以到目前为止,这是我所知道的/我已经尝试过的:
这是vue文件的内容:
<template>
<div id="{{name}}-select" class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label fill getmdl-select ">
<input class="mdl-textfield__input" v-on:blur="blur" :disabled="disabled" type="text" readonly="{{!autocomplete}}" id="{{name}}"
tabIndex="-1" data-val="" v-model="key | label" v-on:keyup="filter">
<label for="{{name}}">
<i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
</label>
<ul for="{{name}}" class="mdl-menu mdl-menu--bottom-left mdl-js-menu">
<li v-for="option in optionsArray" class="mdl-menu__item"
v-on:click="selected(option)"
data-val="{{option.value}}"><span v-text="option.label | label"></span></li>
</ul>
</div>
</template>
这是代码的方法部分,其中包含导致错误的行:
methods: {
selected: function (option) {
if (option) {
this.$set('key', option.label)
this.$set('value', option.value)
this.$set('lookupObject', option)
this.optionsArray = lookup(this.options)
document.querySelector('#' + this.name + '-select .mdl-js-menu').MaterialMenu.hide()
} else {
this.$set('lookupObject', undefined)
}
},
...
}
this.name等于'lang'。
目标是获得一个菜单来选择一种语言,但是这个Vue组件被多次使用来动态生成选项列表。
调试期间:
我的考虑:
你们中的任何人都遇到相同的错误吗? 有什么我想念的吗?
谢谢