返回顶部
首页 > 资讯 > 前端开发 > 其他 >Vue3中setup怎么添加name
  • 102
分享到

Vue3中setup怎么添加name

Vue3setupname 2023-05-14 23:05:48 102人浏览 安东尼
摘要

vue3中name有什么用呢?1.在递归组件的时候需要定义name2.配合keep-alive include exclude 可以缓存组件3.在Vue有报错或者调试的时候可以看到组件的nameVue3 定义 name1.自动生成<s

    vue3中name有什么用呢?

    1.在递归组件的时候需要定义name

    2.配合keep-alive include exclude 可以缓存组件

    3.在Vue有报错或者调试的时候可以看到组件的name

    Vue3 定义 name

    1.自动生成

    <script setup> 只要在script开启setup语法糖模式 单文件组件会自动根据文件名生成对应的 name 选项 例如 Tree.vue 那他的name 就是 Tree 自动生成,这样做有一个弊端如果想修改name需要修改组件名称如果有地方import 该组件需要一并修改。

    2.在开启一个script用来定义name

    优点 这种方式可以随意定义name 弊端 一个单文件组件出现两个script 会让人感到疑惑。

    <template>
    <div></div>
    </template>
    
    <script lang="ts" setup>
    import {ref,Reactive } from 'vue'
    </script>
    
    <script lang='ts'>
     export default {
        name:"XXX"
     }
    </script>
    
    <style lang="less" scoped>
    
    </style>

    3.使用第三方插件 unplugin-vue-define-options

    安装方法 npm i unplugin-vue-define-options -D

    vite 使用

    // vite.config.ts
    import DefineOptions from 'unplugin-vue-define-options/vite'
    import Vue from '@vitejs/plugin-vue'
    
    export default defineConfig({
      plugins: [Vue(), DefineOptions()],
    })

    配置tsconfig.JSON

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

    使用方法 通过编译宏 defineOptions 添加nameinheritAttrs

    <script setup lang="ts">
    defineOptions({
      name: 'Foo',
      inheritAttrs: false,
    })
    </script>

    4.个人想法 我想着直接在script 定义name 不好吗?

    <template>
    <div></div>
    </template>
    
    <script name="xiaoman" lang="ts" setup>
    import {ref,reactive } from 'vue'
    </script>
    
    
    <style lang="less" scoped>
    
    </style>

    这件事情在Vue社区也是进行了激烈的讨论,而尤大也是做出了回复

    尤大觉得这个构思很好,但是有一些担忧,在我们使用组件的时候需要定义nameinheritAttrs 情况非常罕见,大部分组件库的开发人员可能经常会使用这两个东西,但对于90%的应用程序组件来说,这确实是一组不同的权衡,并且处理props将会变得很麻烦,再加上实现的复杂性,不确定做这件事是否值得。

    不过已经有一个插件实现该功能 unplugin-vue-setup-extend-plus

    我们来复刻一个简易版 其原理还是加一个script 只不过开发人员看不到了这个script

    Vue3 setup 支持 name 插件实现 思路借鉴上面插件

    import type { Plugin } from 'vite'
    //@vue/compiler-sfc 这个插件是处理我们单文件组件的代码解析
    import { compileScript, parse } from '@vue/compiler-sfc'
    
    export default function setupName(): Plugin {
        return {
    
            name: 'vite:plugin:vue:name',
            //一个 Vite 插件可以额外指定一个 `enforce` 属性
            //(类似于 webpack 加载器)来调整它的应用顺序。`enforce` 的值可以是`pre` 或 `post`
            //加载顺序为
              //Alias
              //带有 `enforce: 'pre'` 的用户插件
              //Vite 核心插件
              //没有 enforce 值的用户插件
              //Vite 构建用的插件
              //带有 `enforce: 'post'` 的用户插件
             //Vite 后置构建插件(最小化,manifest,报告)
            enforce: "pre",
            //transfORM code参数就是我们写的代码比如vue代码  id就是路径例如/src/xx/xx.vue
            transform(code, id) {
                //只处理vue结尾的文件
                if (/.vue$/.test(id)) {
                    let { descriptor } = parse(code)
                    //通过compileScript 处理script 返回result
                      //attrs: { name: 'xm', lang: 'ts', setup: true },
                      //lang: 'ts',
                      //setup: true,
                    const result = compileScript(descriptor, { id })
                    //attrs 此时就是一个对象
                    const name = result.attrs.name 
                    const lang = result.attrs.lang
                    const inheritAttrs = result.attrs.inheritAttrs
                    //写入script
                    const template = `
                    <script ${lang ? `lang=${lang}` :  ''}>
                     export default {
                        ${name ? `name:"${name}",`  : ''}
                        ${inheritAttrs ? `inheritAttrs: ${inheritAttrs !== 'false'},` : ''}
                     }
                    </script>
                    `;
                    //最后拼接上这段代码 也就是我们加的script这一段 返回code
                    code += template;
                   // console.log(code)
                }
    
                return code
            }
        }
    }

    然后在vite config ts 引入我们写好的插件

    Vue3中setup怎么添加name

    Tree.vue 子组件

    <template>
        <div v-for="item in data">
            {{ item.name }}
            <xm v-if="item?.children?.length" :data='item?.children'></xm>
        </div>
    </template>
    
    <script name='xm' lang="ts" setup>
    import { ref, reactive } from 'vue'
    defineProps<{
        data: any[]
    }>()
    </script>

    App.vue 父组件

    <template>
        <TreeVue :data="data"></TreeVue>
    </template>
    
    <script lang="ts" setup>
    import TreeVue from './components/Tree.vue';
    const data = [
        {
            name: "1",
            children: [
                {
                    name: "1-1",
                    children: [
                        {
                            name: "1-1-1"
                        }
                    ]
                }
            ]
        }
    ]
    </script>

    组件成功递归出来

    Vue3中setup怎么添加name

    以上就是Vue3中setup怎么添加name的详细内容,更多请关注编程网其它相关文章!

    --结束END--

    本文标题: Vue3中setup怎么添加name

    本文链接: https://www.lsjlt.com/news/208268.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Vue3中setup怎么添加name
      Vue3中name有什么用呢?1.在递归组件的时候需要定义name2.配合keep-alive include exclude 可以缓存组件3.在Vue有报错或者调试的时候可以看到组件的nameVue3 定义 name1.自动生成<s...
      99+
      2023-05-14
      Vue3 setup name
    • Vue3中setup如何添加name
      这篇文章主要介绍了Vue3中setup如何添加name的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3中setup如何添加name文章都会有所收获,下面我们一起来看看吧。Vue3中name有什么用呢?在递...
      99+
      2023-07-06
    • Vue3中setup script怎么用
      这篇文章主要为大家展示了“Vue3中setup script怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue3中setup script怎么用”这篇文章吧。前言Vu...
      99+
      2023-06-29
    • 怎么使用vue3的setup()
      本篇内容主要讲解“怎么使用vue3的setup()”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用vue3的setup()”吧!从 vue2 升级到 vue3,vue3 是可以兼容 vue...
      99+
      2023-06-25
    • 怎么在vue3中使用setup、 ref、reactive
      本篇文章为大家展示了怎么在vue3中使用setup、 ref、reactive,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.初识setUp的使用简单介绍下面的代码功能:使用ref函数,去使用监听...
      99+
      2023-06-15
    • vue3中setup()和reactive()函数怎么使用
      <template> <ul> <li v-for="(item, index) in arr" :key="item" @click="...
      99+
      2023-05-19
      Vue3 setup() reactive()
    • 怎么在vue3中使用setup、 ref和reactive
      本文小编为大家详细介绍“怎么在vue3中使用setup、 ref和reactive”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在vue3中使用setup、 ref和reactive”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
      99+
      2023-07-06
    • vue3怎么动态添加路由
      一、初始化项目初始化vite + vue + ts项目,引入vue-router。目录结构如下,注意这个404重定向,vue3不支持直接使用“*”匹配所有路由了,要使用:catchAll(.*)。初始化路由:import {createRo...
      99+
      2023-05-18
      Vue3
    • Vue3中的script setup语法糖怎么使用
      这篇文章主要介绍了Vue3中的script setup语法糖怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3中的script setup语法糖怎么使用文章都会有所收获,下面我们一起来看看吧。scr...
      99+
      2023-07-04
    • Vue3中的setup与自定义指令怎么使用
      setup语法糖 最大好处就是所有声明部分皆可直接使用,无需return出去注意:部分功能还不完善,如:name、render还需要单独加入script标签按compositionAPI方式编写// setup 下还可以附加<scri...
      99+
      2023-05-14
      Vue3 setup
    • 怎么在Vue3中使用<script lang=“ts“ setup>语法糖
      迁移组件以下组件有两个道具(要显示的和一个标志)。通过另一个组件,计算模板中显示的小马图像的URL,基于这两个道具。该组件还会在用户单击它时发出一个事件。The image selected while the Ponypony ...
      99+
      2023-05-16
      Vue3 setup
    • Vue3中SetUp函数的props和context参数怎么用
      第一个参数props:props是一个对象,包含父组件传递给子组件的所有数据。在子组件中使用props进行接收。包含配置声明并传入的所有的属性的对象也就是说:如果你想通过props的方式输出父组件传递给子组件的值。你需要使用props进行接...
      99+
      2023-05-22
      Vue3 setup props
    • vue3更新的setup语法糖怎么用
      本文小编为大家详细介绍“vue3更新的setup语法糖怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue3更新的setup语法糖怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。语法糖用法://&nb...
      99+
      2023-06-30
    • vue3中setup函数的参数props和context怎么配置
      这篇文章主要介绍了vue3中setup函数的参数props和context怎么配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3中setup函数的参数props和con...
      99+
      2024-04-02
    • Vue3怎么使用setup语法糖拒绝写return
      defineProps 代替props接收父组件传递的数据(父组件向子组件传参)父组件:<template> <div>父组件</div> <Child :title="msg&q...
      99+
      2023-05-14
      Vue3 return setup
    • Vue3中的setup语法糖、computed函数、watch函数怎么使用
      这篇文章主要介绍“Vue3中的setup语法糖、computed函数、watch函数怎么使用”,在日常操作中,相信很多人在Vue3中的setup语法糖、computed函数、watch函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简...
      99+
      2023-07-05
    • Vue3中的setup执行时机与注意点是什么
      今天小编给大家分享一下Vue3中的setup执行时机与注意点是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。setup执...
      99+
      2023-07-02
    • vue3.0中setup怎么使用
      本文小编为大家详细介绍“vue3.0中setup怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue3.0中setup怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在vue3.0中,setup函...
      99+
      2023-06-29
    • MySQL中怎么添加注释
      本篇文章给大家分享的是有关MySQL中怎么添加注释,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在MySQL数据库中, 字段或列的注释是用属性...
      99+
      2024-04-02
    • MySQL中怎么添加字段
      这期内容当中小编将会给大家带来有关MySQL中怎么添加字段,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  MySQL字段的长度有哪些  数值类型  列类型需要的存储量 ...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作