欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3?setup添加name的方法步驟

 更新時間:2022年11月30日 15:31:45   作者:小滿zs  
如果你在 vue3 開發(fā)中使用了語法的話,對于組件的name屬性,需要做一番額外的處理,下面這篇文章主要給大家介紹了關(guān)于Vue3?setup添加name的相關(guān)資料,需要的朋友可以參考下

Vue3中name有什么用呢?

1.在遞歸組件的時候需要定義name

2.配合keep-alive include exclude 可以緩存組件

3.在Vue有報(bào)錯或者調(diào)試的時候可以看到組件的name

Vue3 定義 name

1.自動生成

<script setup> 只要在script開啟setup語法糖模式 單文件組件會自動根據(jù)文件名生成對應(yīng)的 name 選項(xiàng) 例如 Tree.vue 那他的name 就是 Tree 自動生成,這樣做有一個弊端如果想修改name需要修改組件名稱如果有地方import 該組件需要一并修改。

2.在開啟一個script用來定義name

優(yōu)點(diǎn) 這種方式可以隨意定義name 弊端 一個單文件組件出現(xiàn)兩個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社區(qū)也是進(jìn)行了激烈的討論,而尤大也是做出了回復(fù)

大致意思就是:尤大覺得這個構(gòu)思很好,但是有一些擔(dān)憂,在我們使用組件的時候需要定義nameinheritAttrs 情況非常罕見,大部分組件庫的開發(fā)人員可能經(jīng)常會使用這兩個東西,但對于90%的應(yīng)用程序組件來說,這確實(shí)是一組不同的權(quán)衡,并且處理props將會變得很麻煩,再加上實(shí)現(xiàn)的復(fù)雜性,不確定做這件事是否值得。

不過已經(jīng)有一個插件實(shí)現(xiàn)該功能 unplugin-vue-setup-extend-plus

我們來復(fù)刻一個簡易版 其原理還是加一個script 只不過開發(fā)人員看不到了這個script

Vue3 setup 支持 name 插件實(shí)現(xiàn) 思路借鑒上面插件

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 加載器)來調(diào)整它的應(yīng)用順序。`enforce` 的值可以是`pre` 或 `post`
        //加載順序?yàn)?
          //Alias
          //帶有 `enforce: 'pre'` 的用戶插件
          //Vite 核心插件
          //沒有 enforce 值的用戶插件
          //Vite 構(gòu)建用的插件
          //帶有 `enforce: 'post'` 的用戶插件
         //Vite 后置構(gòu)建插件(最小化,manifest,報(bào)告)
        enforce: "pre",
        //transform code參數(shù)就是我們寫的代碼比如vue代碼  id就是路徑例如/src/xx/xx.vue
        transform(code, id) {
            //只處理vue結(jié)尾的文件
            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 引入我們寫好的插件

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>

組件成功遞歸出來

總結(jié)

到此這篇關(guān)于Vue3 setup添加name的文章就介紹到這了,更多相關(guān)Vue3 setup添加name內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vscode+vue cli3.0創(chuàng)建項(xiàng)目配置Prettier+eslint方式

    vscode+vue cli3.0創(chuàng)建項(xiàng)目配置Prettier+eslint方式

    這篇文章主要介紹了vscode+vue cli3.0創(chuàng)建項(xiàng)目配置Prettier+eslint方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用vue-antDesign menu頁面方式(添加面包屑跳轉(zhuǎn))

    使用vue-antDesign menu頁面方式(添加面包屑跳轉(zhuǎn))

    這篇文章主要介紹了使用vue-antDesign menu頁面方式(添加面包屑跳轉(zhuǎn)),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Vue項(xiàng)目中配置pug解析支持

    Vue項(xiàng)目中配置pug解析支持

    這篇文章主要介紹了Vue項(xiàng)目中配置pug解析支持的實(shí)例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • vue-router的使用方法及含參數(shù)的配置方法

    vue-router的使用方法及含參數(shù)的配置方法

    這篇文章主要介紹了vue-router的使用方法及含參數(shù)的配置方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Vue3如何獲取proxy對象的值而不是引用的方式

    Vue3如何獲取proxy對象的值而不是引用的方式

    這篇文章主要介紹了Vue3如何獲取proxy對象的值而不是引用的方式,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Vue.Draggable實(shí)現(xiàn)拖拽效果

    Vue.Draggable實(shí)現(xiàn)拖拽效果

    這篇文章主要介紹了Vue.Draggable實(shí)現(xiàn)拖拽效果,使用簡單方便 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue使用js-audio-recorder實(shí)現(xiàn)錄制,播放與下載音頻功能

    Vue使用js-audio-recorder實(shí)現(xiàn)錄制,播放與下載音頻功能

    這篇文章主要為大家詳細(xì)介紹了Vue如何使用js-audio-recorder實(shí)現(xiàn)錄制,播放與下載音頻功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-12-12
  • vue頁面鎖屏的完美解決方法記錄

    vue頁面鎖屏的完美解決方法記錄

    鎖屏是指用戶暫時離開時點(diǎn)擊鎖屏,用戶無法跳轉(zhuǎn)到其他頁面,回來輸入密碼點(diǎn)擊解鎖,下面這篇文章主要給大家介紹了關(guān)于vue頁面鎖屏的完美解決方法,需要的朋友可以參考下
    2022-06-06
  • vue下載excel文件的四種方法實(shí)例

    vue下載excel文件的四種方法實(shí)例

    最近vue項(xiàng)目中遇到了需求,客戶端需要實(shí)現(xiàn)以excel表格形式下載數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于vue下載excel文件的四種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • vue3+ts+Vuex中使用websocket協(xié)議方式

    vue3+ts+Vuex中使用websocket協(xié)議方式

    這篇文章主要介紹了vue3+ts+Vuex中使用websocket協(xié)議方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論