Директива v-slot не поддерживает никаких модификаторов
Я использую vuetify datatable, у нас есть разные слоты с некоторыми реквизитами, например, ниже
<template #header.data-table-select="{ on, props }">
<v-simple-checkbox color="purple" v-bind="props" v-on="on"></v-simple-checkbox>
</template>
Я также использую плагин vue eslint для проверки любых ошибок / плохого кода / или каких-либо нарушений, но если я использую приведенный выше фрагмент кода в своем файле, он дает мне ошибку
Директива v-slot не поддерживает никаких модификаторов
согласно этим документам это правильно https://eslint.vuejs.org/rules/valid-v-slot.html
но у него нет примера того, как мы справляемся с этим делом
как я могу удалить это предупреждение / или исправить это, не делая его исключением
Спасибо
10 ответов
Я не вижу ни одного v-slot
в предоставленном вами коде, чтобы я мог показать вам только свой вариант использования.
С ошибкой Eslint:
<template v-slot:item.actions="{ item }">
Без ошибки:
<template v-slot:[`item.actions`]="{ item }">
В
eslint-plugin-vue@^7.1.0
, вы можете использовать
allowModifiers
вариант в
vue/valid-v-slot
правило.
// .eslintrc.js
'vue/valid-v-slot': ['error', {
allowModifiers: true,
}],
Для меня следующая запись в settings.json устранила проблему:
"vetur.validation.template": false
Я попробовал ответ Hexodus, но в моем случае шаблон вообще не отображался.
Я заставил его отлично работать с этим, без каких-либо изменений правил eslint:
<template #[`item.actions`]="{ item }">
РЕДАКТИРОВАТЬ: как указано в комментариях и (правильный) ответ Hexodus, вы можете обойти предупреждение о линтинге, используя имена динамических слотов, которые возвращают строку (шаблон). "Не включать" больше не рекомендуется, так как теперь это стандартное правило. Таким образом, я рекомендую использовать метод Hexodus вместо полного отключения действующего правила v-слота.
Исходное сообщение:
Вы не можете исправить это предупреждение о линтинге.
- В синтаксисе Vue для модификаторов используется точка, чтобы изменить способ работы директивы (например, v-model.number)
- То, как Vuetify динамически именует свои слоты, использует точку для выбора определенной части компонента (#header.data-table-select).
ESLint не может различить, пытаетесь ли вы установить модификатор для слота (что невозможно), или у вас есть имя слота, содержащее точку.
Самое простое, что вы можете сделать, - это отключить правило. Поскольку правило 'valid-v-slot' не включено по умолчанию ни в одной из базовых конфигураций eslint-plugin-vue, вы сможете найти его в разделе "rules" вашей конфигурации eslint.
** попробуй это **
<template v-slot:item.createdDate="{ item }">
если используете формат vetur, добавьте опцию в настройках vscode
"vetur.validation.template": false
Вы можете определить имя динамического слота следующим образом:
<template #[`item.actions`]="{ item }">
// your code
</template>
Дополнительную информацию можно найти в официальной документации Vue:https://vuejs.org/guide/comComponents/slots.html#dynamic-slot-names .
У меня сработало:
в.vue
<template v-slot:[getitemcontrols()]="props">
в.js
methods: {
getitemcontrols() {
return `item.controls`;
},
Возможно, это не ответ, и вы также можете не согласиться с моим решением, но это то, что я сделал.
ОТВЕТ: Я понизил Vetur до версии 0.23! Это сработало! (Ожидается выпуск новой версии, которая решает эту проблему.
Откройте боковую панель расширений на VSCode, щелкните правой кнопкой мыши Vetur и выберите install other versions
.
В качестве альтернативы, если ваш код работает нормально, строка перед vue-eslint-plugin
ошибка вы можете попробовать <!-- eslint-disable-next-line vue/no-v-html -->
отключить eslint для следующей строки или <!-- eslint-disable -->
чтобы отключить каждое отключение линтинга под ним.
Работал на некоторых людей, но не на меня, и может не работать на вас. В любом случае предпочтительнее перейти на более раннюю версию Vetur.
Я использую фреймворк laravel и vuetify. Предыдущие коды внезапно сообщали об ошибках eslint с красными линиями - директива vue/valid-v-slot, добавление нескольких корневых узлов в шаблон и т. Д., Без рекомендации какого-либо быстрого исправления, но все они работают нормально. Ответы, которые я получил в результате поиска, никогда не давали никаких результатов, пока я не понизил рейтинг, любое другое решение будет приветствоваться!
Для меня эта конфигурация, добавленная в package.json, работала
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/base"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
}