如何在`<script setup>`中定义`name`和`inheritAttrs`?

Wen*_* Du 6 javascript vue.js vuejs3 vue-composition-api vue-script-setup

选项 API:

<script>
  import { defineComponent } from 'vue'

  export default defineComponent({
    name: 'CustomName', // 
    inheritAttrs: false, // 
    setup() {
      return {}
    },
  })
</script>
Run Code Online (Sandbox Code Playgroud)

如何做到这一点<script setup>,是否有等价于nameinheritAttrs喜欢definePropsdefineEmits

<script setup>
  //  how to define them here?
</script>
Run Code Online (Sandbox Code Playgroud)

Wen*_* Du 48

使用 Vue ^3.3,您现在可以defineOptions()直接使用:

<script setup>
  defineOptions({
    name: 'CustomName',
    inheritAttrs: false,
    customOptions: {},
  })
</script>
Run Code Online (Sandbox Code Playgroud)

<script setup>语法提供了表达大多数现有选项 API 选项的等效功能的能力,但少数选项除外:

  • name
  • inheritAttrs
  • 插件或库所需的自定义选项

如果您需要声明这些选项,有两种方法:

  1. 如果使用 Vue 宏,您可以使用defineOptions(),这可能是最简洁的方法:
<script setup>
  defineOptions({
    name: 'CustomName',
    inheritAttrs: false,
    customOptions: {},
  })
</script>
Run Code Online (Sandbox Code Playgroud)
  1. 如果您不想依赖外部库,可以使用单独的普通<script>export default
<script>
  export default {
    name: 'CustomName',
    inheritAttrs: false,
    customOptions: {},
  }
</script>

<script setup>
  // script setup logic
</script>
Run Code Online (Sandbox Code Playgroud)

编译输出:

<script>
  export default {
    name: 'CustomName',
    inheritAttrs: false,
    customOptions: {},
    setup() {
      // script setup logic
    },
  }
</script>
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderKim当您使用单文件组件时,组件已经从文件名推断其名称,“name”选项允许您覆盖推断的名称,我不知道是否还有其他方法。 (3认同)