Я устанавливаю экземпляр vue в окне в моем main.js
следующим образом:
window.todoEventBus = new Vue()
Внутри моих компонентов я пытаюсь получить доступ к этому глобальному объекту todoEventBus следующим образом:
created() {
todoEventBus.$on('pluralise', this.handlePluralise);
},
Но я получаю ошибки, говоря:
Failed to compile.
./src/components/TodoItem.vue
Module Error (from ./node_modules/eslint-loader/index.js):
error: 'todoEventBus' is not defined (no-undef) at src\components\TodoItem.vue:57:9:
55 |
56 | created() {
> 57 | todoEventBus.$on('pluralise', this.handlePluralise);
| ^
58 | },
59 |
60 | methods: {
1 error found.
Однако если я console.log todoEventBus я вижу объект vue.
Мой файл package.json выглядит следующим образом.
{
"name": "todo-vue",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.3.2",
"vue": "^2.6.10"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.0.0",
"@vue/cli-plugin-eslint": "^4.0.0",
"@vue/cli-service": "^4.0.0",
"babel-eslint": "^10.0.3",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0",
"sass": "^1.23.1",
"sass-loader": "^8.0.0",
"vue-template-compiler": "^2.6.10"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"> 1%",
"last 2 versions"
]
}
1 ответ
Ошибка связана с правилом no-undef . Eslint выдаст эту ошибку, когда переменная не определена в области видимости и не является известной глобальной (например, Promise
, document
и т. Д.).
Вы можете объявить вашу переменную как глобальную, поместив комментарий в файл, который вы хотите использовать, следующим образом:
/* global todoEventBus */
или вы можете объявить его как глобальный в вашем конфиге eslint
"eslintConfig": {
"globals": {
"todoEventBus": "readable"
}
}
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.