国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)

這篇具有很好參考價(jià)值的文章主要介紹了基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 今天的需求是封裝一個(gè) Navigation Bar 導(dǎo)航欄組件,目的是給到App幾乎所有的頁面復(fù)用:

基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)

??基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)

?基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)


2. 因?yàn)橹暗捻?xiàng)目里使用過Vant組件庫,筆者第一時(shí)間想到了Vant組件庫中的 NavBar 組件,和當(dāng)前App的需求匹配度很高。Vant組件庫的 NavBar 組件:

基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)


3. 相信你也發(fā)現(xiàn)了,Vant組件庫默認(rèn)主題色是藍(lán)色,而當(dāng)前App的主題色是綠色,翻看了下Vant組件庫的API文檔,存在 ConfigProvider 全局配置,簡(jiǎn)單修改下樣式即可:

:root {
  # 自定義主題色變量
  --cp-primary: #16C2A3;
  # 覆蓋Vant主題色
  --van-primary-color: var(--cp-primary);
}

筆者在?http://t.csdn.cn/cCGFP?文章中介紹過全局引入Vant樣式,這里我把需要修改主題色的代碼放在了項(xiàng)目 src/styles/main.scss 里,不明白的小伙伴可以翻看前文!


4. 準(zhǔn)備工作完成后正式開干,項(xiàng)目 src/components 文件夾下新建 cp-nav-bar.vue 組件,因?yàn)榍拔呐渲眠^按需引入,這里直接使用 <van-nav-bar />?

<template>
  <div>
    <van-nav-bar
      :title="..."
      :right-text="..."
      left-arrow
      fixed
      @click-left="..."
      @click-right="..."
    />
  </div>
</template>
title                標(biāo)題
right-text           右側(cè)文案
left-arrow           是否顯示左側(cè)箭頭
fixed                是否固定在頂部
click-left           點(diǎn)擊左側(cè)按鈕時(shí)觸發(fā)的事件
click-right          點(diǎn)擊右側(cè)按鈕時(shí)觸發(fā)的事件

跑起來觀察后發(fā)現(xiàn),van-nav-bar組件的字號(hào)和當(dāng)前App有些差距,這里使用深度選擇器修改下

<style scoped lang="scss">
:deep() {
  .van-nav-bar {
    &__arrow {
      font-size: 18px;
    }
    &__text {
      font-size: 15px;
    }
  }
}
</style>

vue3深度選擇器不熟悉的同學(xué),可以查看筆者的另一篇軟文?http://t.csdn.cn/NkDbl


5. cp-nav-bar組件需要支持的功能:

①?支持??title??rightText? 屬性,父?jìng)髯訉?shí)現(xiàn) (標(biāo)題和右側(cè)文字的自定義)

② 支持 click-right 事件,子傳父實(shí)現(xiàn) (右側(cè)點(diǎn)擊事件的拋出)

????????注:右側(cè)按鈕對(duì)應(yīng)要做的事情,應(yīng)該是自己定義的,所以我們要支持事件,讓他有自己的實(shí)現(xiàn)邏輯

③ 支持返回上一頁功能????????

????????注: vue2和vue3獲取路由方式有區(qū)別

????????????????this.$router => useRouter()

?????????????????this.$route => useRoute()


6.?標(biāo)題和右側(cè)文字的自定義

# 當(dāng)前組件里
<script lang="ts" setup>
withDefaults(
  defineProps<{
    title?: string
    rightText?: string
  }>(),
  {
    title: '標(biāo)題',
    rightText: '按鈕'
  }
)
</script>
# 使用組件時(shí)
<cp-nav-bar title="凡大來了" right-text="他真的來了" />

7.?右側(cè)點(diǎn)擊事件的拋出

# 當(dāng)前組件里
<script lang="ts" setup>
const emits = defineEmits<{
  (e: 'click-right'): void
}>()
const onClickRight = () => {
  emits('click-right')
}
</script>

<template>
  <div>
    <van-nav-bar
      :title="title"
      :right-text="rightText"
      left-arrow
      fixed
      @click-right="onClickRight"
    />
  </div>
</template>
# 使用組件時(shí)
<template>
  <div>
    <cp-nav-bar
      title="凡大來了"
      right-text="他真的來了"
      @click-right="handleClickRight"
    />
  </div>
</template>

<script lang="ts" setup>
const handleClickRight = () => {
  console.log('兒子的右側(cè)按鈕被點(diǎn)擊了,父親你要做點(diǎn)什么嗎?')
}
</script>

8.?返回上一頁功能

# 當(dāng)前組件里
<script lang="ts" setup>
import { useRouter } from 'vue-router'

const router = useRouter()
const onClickLeft = () => {
  # 無腦回退是不嚴(yán)謹(jǐn)?shù)?  # 如果back字段是個(gè)null,強(qiáng)制拉回我們項(xiàng)目的首頁,反之回退
  # history不熟悉的,看下這里 https://developer.mozilla.org/zh-CN/docs/Web/API/History
  if (history.state.back) {
    router.back()
  } else {
    router.push('/')
  }
}
</script>

<template>
  <div>
    <van-nav-bar
      :title="title"
      :right-text="rightText"
      left-arrow
      fixed
      @click-left="onClickLeft"
      @click-right="onClickRight"
    />
  </div>
</template>
# 使用組件時(shí)
<cp-nav-bar />標(biāo)簽不需要任何操作,@click-left并沒有拋出,只要引用了組件,都具有back功能

9. 有同學(xué)可能會(huì)有疑問:為什么可以直接使用組件,不導(dǎo)入不注冊(cè)?

因?yàn)楣P者在前文中 配置了 unplugin-vue-components 插件,該插?默認(rèn)會(huì)把項(xiàng)目 src/compoenents 目錄下的組件自動(dòng)導(dǎo)入注冊(cè),是不是爽歪歪?。?!

再次附上前文地址?http://t.csdn.cn/cCGFP


10.?cp-nav-bar 組件類型配置

寫到這里咱們的 cp-nav-bar 組件基本完成,還剩下最后一個(gè)痛點(diǎn)是缺失屬性提示、事件提示、鼠標(biāo)放上去也沒有類型提示,這該怎么解決呢?

前文里我在?vite.config.js 文件中做了如下配置:

...
 
export default {
  plugins: [
    vue(),
    Components({
      # 不生成類型聲明文件自己寫
      dts: false
      ...   
    })
  ]
}

對(duì)!沒錯(cuò)!我取消了自動(dòng)生成類型聲明文件,實(shí)際上你配置了也沒卵用!為了解決缺失提示的痛點(diǎn),筆者在 src目錄下 \ types目錄下 \ 新建 components.d.ts

# 怎么給全局的組件提供類型?
# 寫一個(gè)類型聲明文件,declare module 'vue' 聲明一個(gè) vue 類型模塊
# 然后 interface GlobalComponents 書寫全局組件的類型
# key組件名稱支持大駝峰, value是組件類型, 通過 typeof 組件實(shí)例得到

import CpNavBar from '@/components/cp-nav-bar.vue'

declare module 'vue' {
  interface GlobalComponents {
    CpNavBar: typeof CpNavBar
  }
}

End-------------------文章來源地址http://www.zghlxwxcb.cn/news/detail-417467.html

到了這里,關(guān)于基于Vant組件庫二次封裝組件(TS+Vue3.x環(huán)境)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mpVue 微信小程序基于vant-weapp 組件的二次封裝TForm 表單組件(修改源碼插槽使用)

    mpVue 微信小程序基于vant-weapp 組件的二次封裝TForm 表單組件(修改源碼插槽使用)

    1、mpVue微信小程序不支持動(dòng)態(tài)組件(component ) 2、mpVue微信小程序不支持動(dòng)態(tài)屬性及事件穿透( $attrs 和 $listeners ) 3、mpVue微信小程序不支持 render 函數(shù) TForm 表單組件 代碼示例: 參數(shù) 說明 類型 默認(rèn)值 className 自定義類名 String - listTypeInfo 下拉選擇數(shù)據(jù)源(type:\\\'date/datetime/ra

    2024年02月16日
    瀏覽(99)
  • vue3組件二次封裝Ui處理

    vue3組件二次封裝Ui處理

    在Vue開發(fā)中,我們常常需要使用UI框架提供的組件。但是UI框架的組件可能并不符合我們的需求,這時(shí)候就需要進(jìn)行二次封裝。下面是一些關(guān)于Vue組件二次封裝Ui處理的技巧: 子組件代碼: 父組件使用: 如果使用props接收弊端: 基本上組件不會(huì)只有一兩個(gè)屬性,屬性多的話接

    2023年04月14日
    瀏覽(32)
  • # vue3 vant4 Tabbar 標(biāo)簽欄組件的封裝 和Popup彈出層的封裝

    # vue3 vant4 Tabbar 標(biāo)簽欄組件的封裝 和Popup彈出層的封裝

    需求如上,標(biāo)簽欄里第三個(gè)是圖片,整個(gè)項(xiàng)目有兩種場(chǎng)景, 標(biāo)簽欄正常跳轉(zhuǎn)頁面, 標(biāo)簽攔渲染別的圖片時(shí)候,點(diǎn)擊就是打開彈出層, 封裝了標(biāo)簽欄,彈出層兩部分,作為公共組件 標(biāo)簽欄的封裝 徽標(biāo)樣式需要調(diào)整,list現(xiàn)在是自己暫時(shí)再state里寫的假數(shù)據(jù) 下面是再使用標(biāo)簽組

    2024年01月20日
    瀏覽(160)
  • vue3+ts+vite項(xiàng)目引入echarts,vue3項(xiàng)目echarts組件封裝

    vue3+ts+vite項(xiàng)目引入echarts,vue3項(xiàng)目echarts組件封裝

    技術(shù)棧 :Vue3 + Ts + Vite + Echarts 簡(jiǎn)介 : 圖文詳解,教你如何在 Vue3 項(xiàng)目中 引入Echarts , 封裝Echarts組件 ,并實(shí)現(xiàn)常用Echarts圖例 1.1 靜態(tài)效果 1.2 動(dòng)態(tài)效果 2.1 安裝 Echarts npm: pnpm: 2.2 main.ts 中引入 2.3 Echarts 組件封裝 /src/components/ReEcharts/index.vue 文件中寫入如下代碼 3.1 柱狀圖 實(shí)現(xiàn)

    2024年02月09日
    瀏覽(33)
  • 分析 vant4 源碼,學(xué)會(huì)用 vue3 + ts 開發(fā)毫秒級(jí)渲染的倒計(jì)時(shí)組件,真是妙啊

    分析 vant4 源碼,學(xué)會(huì)用 vue3 + ts 開發(fā)毫秒級(jí)渲染的倒計(jì)時(shí)組件,真是妙啊

    2022年11月23日首發(fā)于掘金,現(xiàn)在同步到公眾號(hào)。 11. 前言 大家好,我是若川。推薦點(diǎn)右上方藍(lán)字若川視野把我的公眾號(hào) 設(shè)為星標(biāo) 。我傾力持續(xù)組織了一年多源碼共讀,感興趣的可以加我微信 lxchuan12 參與。另外,想學(xué)源碼,極力推薦關(guān)注我寫的專欄《學(xué)習(xí)源碼整體架構(gòu)系列》

    2024年02月05日
    瀏覽(98)
  • vue3 ts element plus form表單二次封裝詳細(xì)步驟 (附參數(shù)、類型詳細(xì)介紹及簡(jiǎn)單使用示例)

    vue3 ts element plus form表單二次封裝詳細(xì)步驟 (附參數(shù)、類型詳細(xì)介紹及簡(jiǎn)單使用示例)

    上篇table 表格封裝 講到項(xiàng)目中經(jīng)常會(huì)用到 table 表格,所以做了封裝。當(dāng)然,form 表單使用的頻率依然很高,所以和封裝 table 表格的思路相似,對(duì) form 表單也做了一個(gè)二次封裝的組件。 查看國(guó)內(nèi)預(yù)覽站 查看國(guó)外預(yù)覽站 1. EasyForm 表單組件封裝 src/components/EasyForm/index.vue Form 表單

    2024年02月07日
    瀏覽(68)
  • vue3+ts - element-plus封裝上傳文件圖片組件

    vue3+ts - element-plus封裝上傳文件圖片組件

    ??近期做到的項(xiàng)目中有涉及到上傳圖片上傳文件的需求,因?yàn)槭莗c管理后臺(tái),用到了element-plus框架,所以我也一起使用element-plus中的上傳圖片上傳圖片功能,并對(duì)它進(jìn)行封裝成一個(gè)組件,方便在多個(gè)地方使用。 1、上傳文件、視頻 2、上傳圖片 ??在這里上傳圖片和文件是分

    2024年02月12日
    瀏覽(37)
  • Vue3+element-ui + TS封裝全局分頁組件

    本文介紹了如何使用Vue3、element-ui和TypeScript封裝一個(gè)全局分頁組件。 在開始之前,你需要安裝以下環(huán)境: Vue3 element-ui TypeScript 這個(gè)分頁組件提供以下功能: 支持自定義每頁顯示條數(shù) 支持自定義跳轉(zhuǎn)到指定頁碼 支持顯示總頁數(shù)和總條數(shù) 支持自定義樣式 分頁組件結(jié)構(gòu) 分頁組

    2024年02月12日
    瀏覽(24)
  • Vue3和TypeScript下基于Axios的二次封裝教程

    Vue3和TypeScript下基于Axios的二次封裝教程

    學(xué)習(xí)如何在Vue3項(xiàng)目中使用TypeScript和Axios進(jìn)行二次封裝,實(shí)現(xiàn)更靈活的網(wǎng)絡(luò)請(qǐng)求處理。詳細(xì)教程包括攔截器設(shè)置和類型擴(kuò)展。

    2024年02月05日
    瀏覽(585)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包