“v-slot”指令不支持任何修饰符

ddw*_*147 82 eslint vue.js vuetify.js

我正在使用 vuetify 的数据表,我们有不同的插槽和一些道具,例如下面

<template  #header.data-table-select="{ on, props }">
    <v-simple-checkbox color="purple" v-bind="props" v-on="on"></v-simple-checkbox>
</template>
Run Code Online (Sandbox Code Playgroud)

我也在使用 vue 的 eslint 插件来检查任何错误/错误代码/或任何违规,但如果我在我的文件中使用上面的代码片段,它会给我错误

“v-slot”指令不支持任何修饰符

根据此文档,这是正确的https://eslint.vuejs.org/rules/valid-v-slot.html

但它没有任何例子说明我们如何处理这种情况

我怎样才能删除此警告/或使其正确,而不使其免除

谢谢

Hex*_*dus 221

v-slot在您提供的代码中没有看到任何内容,因此我只能向您展示我的用例。

使用 Eslint 错误:

<template v-slot:item.actions="{ item }">
Run Code Online (Sandbox Code Playgroud)

没有错误:

<template v-slot:[`item.actions`]="{ item }">
Run Code Online (Sandbox Code Playgroud)

  • 我的代码格式化程序不喜欢这种解决方法,它将其转换为 `&lt;template v-slot:[`item.actions`]="{ item }"&gt;` 有什么想法吗? (11认同)
  • @Hexodus,“#”是“v-slot:”的 Vue 快捷方式 (5认同)
  • 对于像我一样在文档中寻找速记符号的人:https://vuejs.org/v2/guide/components-slots.html#Named-Slots-Shorthand (5认同)
  • @DiegoGarcia您可能正在使用Vetur,您可以从它的设置中更改vetur html格式化程序。将其从 Prettyhtml 更改为 Prettier。 (2认同)
  • 我不知道你能做到这一点!我们在好几页上都有这些警告,这让我的强迫症患者稍微高兴了一点。 (2认同)

小智 31

在 中eslint-plugin-vue@^7.1.0,您可以allowModifiersvue/valid-v-slot规则中使用选项。

// .eslintrc.js
'vue/valid-v-slot': ['error', {
  allowModifiers: true,
}],
Run Code Online (Sandbox Code Playgroud)

vue/valid-v-slot #options

  • 或者,如果您像我一样有一个 javascript 格式的文件(.eslintrc.js),您可以添加:规则:{'vue/valid-v-slot':['error',{allowModifiers:true,},],}, (3认同)
  • 这似乎不适用于我的设置、nuxtjs、vscode... (3认同)

Cos*_*ian 18

我尝试了 Hexodus 的答案,但在我的情况下模板根本没有渲染。

我让它完美地工作,没有任何 eslint 规则修改:

<template #[`item.actions`]="{ item }">
Run Code Online (Sandbox Code Playgroud)


Exc*_*ard 11

编辑:正如评论和 Hexodus 的(正确)答案所通知的那样,您可以通过使用返回字符串(模板)的动态插槽名称来解决 linting 警告。不再推荐“不启用”,因为这现在是标准规则。因此,我建议使用 Hexodus 的方法而不是完全禁用有效的 v-slot 规则。


原帖:

您无法真正修复此 linting 警告。

  • 修饰符的 Vue 语法使用点来改变指令的功能(例如 v-model.number)
  • Vuetify 动态命名它们的插槽的方式使用一个点来选择组件的特定部分(#header.data-table-select)。

ESLint 无法区分您是否尝试在插槽上设置修饰符(这是不可能的),或者您的插槽名称是否包含点。

您可以做的最简单的事情是禁用规则。由于 eslint-plugin-vue 的任何基本配置默认都没有启用 'valid-v-slot' 规则,所以您应该能够在 eslint 配置的“规则”下找到它。

  • 看起来现在默认启用此功能仅供参考 (2认同)

Dan*_*idt 9

对我来说,settings.json 中的以下条目解决了这个问题:

 "vetur.validation.template": false
Run Code Online (Sandbox Code Playgroud)

  • 您确定这样做不会禁用除此之外的任何其他功能吗? (5认同)
  • 这对我也有用。显然这个错误源自 Vetur,其内置的 `eslint-plugin-vue` 没有引用项目 `.eslintrc` 。(取自https://gitmemory.com/issue/vuejs/eslint-plugin-vue/1269/668921391) (3认同)
  • 将此行添加到我的项目根目录中的 .vscode/settings.json 中不起作用。为了让它工作,我必须转到文件 --&gt; 首选项 --&gt; 扩展,选择 Vetur 扩展,单击它的设置,向下滚动找到“在 settings.json 中编辑”并将该行添加到底部那个文件。无论出于何种原因,这是一个不同的文件,因此当我将其添加到那里时它就起作用了。 (2认同)