解决Vue3中使用setup如何定义组件的name属性

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

vue2的书写name:

<template>
  <div></div>
</template>

<script>
export default {
  name: "nameoption",
};
</script>

<style lang="scss" scoped></style>

解决Vue3中使用setup如何定义组件的name属性

使用setup语法糖的写法在写一个script标签

方式1

<template>
  <div></div>
</template>
<script>
export default {
  name: "nameOption",
};
</script>

<script setup></script>

<style lang="scss" scoped></style>

方式2

安装unplugin-vue-define-options Element Plus中都是使用这个插件来对组件名进行注册的
cnpm install unplugin-vue-define-options -D

在 vite.config.ts

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

import DefineOptions from 'unplugin-vue-define-options/vite';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), DefineOptions()],
});

在tsconfig.json文件进行配置(不是ts的可以忽略)

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["unplugin-vue-define-options"  ]
  }
}

在vuecli创建的项目的vue.config.js

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  transpileDependencies: true,
  configureWebpack: {
    plugins: [require("unplugin-vue-define-options/webpack")()],
  },
});

使用

<template>
   
</template>

<script lang="ts" setup>
  defineOptions({
    name: 'nameOption',
  });
</script>

<style scoped></style>

方式3

安装插件 cnpm install vite-plugin-vue-setup-extend -D
集成插件 在vite.config.ts文件引入vite-plugin-vue-setup-extend

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'

export default defineConfig({
  plugins: [vue(), vueSetupExtend()]
})

直接在script的标签上定义name值

<script setup lang="ts" name="Layout">

</script>
<template>
  <div>layout</div>
</template>

<style lang="less" scoped></style>

不使用setup语法糖

方式1:早期的写法

<template>
  <div>

  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name:'nameOptions',
  setup () { 
    return {}
  }
})
</script>

<style scoped>

</style>

方式2

<template>
  <div>

  </div>
</template>

<script>
import { reactive, toRefs } from 'vue'

export default {
  name:'nameOption',
  setup () { 
    return {}
  }
}
</script>

<style lang="scss" scoped>

</style>





阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: vue