最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中的props組件抽離

 更新時(shí)間:2022年04月23日 09:28:21   作者:黑貓幾絳  
這篇文章主要介紹了vue3中的props組件抽離,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

props組件抽離

引言

假設(shè)你已經(jīng)了解了Vue3的setup函數(shù),不了解的話可以先看看這篇文章。 

vue3中setup函數(shù)的使用

在setup函數(shù)中我們知道它有兩個(gè)參數(shù),用于接收父組件傳遞參數(shù)的props、與負(fù)責(zé)表示上下文對(duì)象的context,在context中常用的是分發(fā)自定義事件的函數(shù)emit,用于組件抽象化后的通信。

在了解了概念后我們可以在本文中動(dòng)手抽象分離一個(gè)組件。

場(chǎng)景

現(xiàn)在假設(shè)需要抽象出一個(gè)移動(dòng)端的頂部Header組件,首先想想一個(gè)頂部組件平時(shí)有哪些功能:名稱、返回、返回主頁(yè)、更多功能。

如果某個(gè)頁(yè)面不需要使用返回主頁(yè)這個(gè)功能,使用時(shí)不進(jìn)行參數(shù)傳遞即可。

設(shè)置好props后在setup中打印props可以看到成功綁定的傳參。

export default {
  props: {
    name: {
      type: String,
      default: ''
    },
    back: {
      type: String,
      default: ''
    },
    home: {
      type: Boolean,
      default: false
    },
    more: {
      type: Boolean,
      default: false
    }
  }
}

在處理完props傳參后我們可以考慮context部分,比如說點(diǎn)擊回退標(biāo)簽后觸發(fā)某個(gè)事件,那么就會(huì)在身為調(diào)用者的父組件中綁定某個(gè)回調(diào)函數(shù),在子組件emit后執(zhí)行該函數(shù)。

因此在和props同級(jí)的情況下聲明將要emit的函數(shù)名稱。

這里貼出template部分與script部分的代碼。

<template>
? <header class="simple-header van-hairline--bottom">
? ? <i v-if="!home" class="nbicon nbfanhui" @click="goBack"></i>
? ? <i v-else class="nbicon nbhome"></i>
? ? <div class="simple-header-name">{{ name }}</div>
? ? <i v-if="more" class="nbicon nbmore"></i>
? </header>
</template>
<script>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
export default {
? props: {
? ? name: {
? ? ? type: String,
? ? ? default: ''
? ? },
? ? back: {
? ? ? type: String,
? ? ? default: ''
? ? },
? ? home: {
? ? ? type: Boolean,
? ? ? default: false
? ? },
? ? more: {
? ? ? type: Boolean,
? ? ? default: false
? ? }
? },
? emits: ['callback'],
? setup(props, context) {
? ? const home = ref(props.home)
? ? const more = ref(props.more)
? ? const router = useRouter()
? ? const goBack = () => {
? ? ? if (!props.back) {
? ? ? ? router.go(-1)
? ? ? } else {
? ? ? ? router.push({ path: props.back })
? ? ? }
? ? ? context.emit('callback')
? ? }
? ? return {
? ? ? goBack,
? ? ? home
? ? }
? }
}
</script>

其實(shí)正確的方法應(yīng)該是,先在多個(gè)頁(yè)面中編碼完畢后再抽離組件。

不過這里只是演示作用,所以就提前清除了具體需要抽離出什么內(nèi)容。

接下來(lái)貼出部分調(diào)用者組件當(dāng)中的代碼。

<!-- 展示頂部標(biāo)簽名 --> 
<s-header :name="'商品詳情'"></s-header>
 
<!-- 綁定子組件emit的方法,當(dāng)抽離組件emit的時(shí)候觸發(fā)close方法 -->
<s-header :name="'訂單詳情'" @callback="close"></s-header>
 
<!-- 設(shè)置返回主頁(yè)的按鈕為true -->
<s-header :name="'購(gòu)物車'" :home="true"></s-header>

這樣我們就成功的抽離出來(lái)了一個(gè)簡(jiǎn)單的組件,通過父組件的傳值來(lái)進(jìn)行不同的顯示。

當(dāng)然,抽離組件可以進(jìn)階,比如使用slot插槽,用法和以前一樣。

<!-- 父 -->
<s-header :name="'關(guān)于我們'">
    <template v-slot:test>
        hello 黑貓幾絳!
    </template>
</s-header>
 
<!-- 子 -->
<slot name="test"></slot> 

組件模板抽離的寫法

  • 方法一:使用JavaScript標(biāo)簽分離模板
  • 方法二:使用template標(biāo)簽分離模板
<!DOCTYPE html>
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8">
?? ??? ?<title></title>
?? ?</head>
?? ?<body>
?? ??? ?<div id="app">
?? ??? ??? ?<cpn></cpn>
?? ??? ??? ?<tmp></tmp>
?? ??? ?</div>
?? ?</body>
?? ?<script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
?? ?<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
?? ?<script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
</html>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue項(xiàng)目依賴包安裝及配置過程

    Vue項(xiàng)目依賴包安裝及配置過程

    這篇文章主要介紹了Vue項(xiàng)目依賴包安裝及配置過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • vue-cli3 配置開發(fā)與測(cè)試環(huán)境詳解

    vue-cli3 配置開發(fā)與測(cè)試環(huán)境詳解

    這篇文章主要介紹了vue-cli3 配置開發(fā)與測(cè)試環(huán)境詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-05-05
  • vue中如何使用vue-touch插件

    vue中如何使用vue-touch插件

    這篇文章主要介紹了vue中使用vue-touch插件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • vue2.0構(gòu)建單頁(yè)應(yīng)用最佳實(shí)戰(zhàn)

    vue2.0構(gòu)建單頁(yè)應(yīng)用最佳實(shí)戰(zhàn)

    這篇文章主要為大家分享了vue2.0構(gòu)建單頁(yè)應(yīng)用最佳實(shí)戰(zhàn)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vuex 使用 v-model 配合 state的方法

    Vuex 使用 v-model 配合 state的方法

    這篇文章主要介紹了Vuex 使用 v-model 配合 state的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 面試官常問Vue和React區(qū)別解析

    面試官常問Vue和React區(qū)別解析

    Vue和React都是流行的前端框架,它們有很多相似之處,如組件化和使用虛擬DOM,但是,它們?cè)谠O(shè)計(jì)理念、組件存在形式、diff優(yōu)化和中文文檔方面存在一些不同,這篇文章給大家介紹面試官常問Vue和React區(qū)別,感興趣的朋友一起看看吧
    2025-02-02
  • Vue中插槽slot的用法詳解

    Vue中插槽slot的用法詳解

    插槽(Slot)是Vue.js中一個(gè)非常重要的概念,它極大地提高了組件的復(fù)用性和靈活性,通過插槽,我們可以自定義組件的內(nèi)容,使其能夠適應(yīng)不同的場(chǎng)景,本文將結(jié)合實(shí)際案例,詳細(xì)介紹Vue中插槽的基本用法、類型以及高級(jí)技巧,需要的朋友可以參考下
    2024-11-11
  • Vue2+Echarts封裝組件之專注邏輯,圖表生成自動(dòng)化方式

    Vue2+Echarts封裝組件之專注邏輯,圖表生成自動(dòng)化方式

    文章介紹了使用Vue2封裝的Echarts圖表組件,簡(jiǎn)化了圖表的生成和渲染過程,提供了多種圖表類型和交互功能,提高了開發(fā)效率,幫助開發(fā)者專注于業(yè)務(wù)邏輯的開發(fā)
    2025-02-02
  • Vue編程三部曲之將template編譯成AST示例詳解

    Vue編程三部曲之將template編譯成AST示例詳解

    這篇文章主要為大家介紹了Vue編程三部曲之將template編譯成AST示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 粘貼可用的element-ui validateField局部校驗(yàn)

    粘貼可用的element-ui validateField局部校驗(yàn)

    這篇文章主要為大家介紹了粘貼可用element-ui中validateField局部校驗(yàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論

东城区| 洪江市| 嘉善县| 寻乌县| 莲花县| 光山县| 沾益县| 汝阳县| 牡丹江市| 临海市| 大庆市| 土默特左旗| 崇明县| 南溪县| 若尔盖县| 新安县| 凯里市| 兴国县| 濮阳县| 临沧市| 文水县| 丁青县| 江山市| 美姑县| 香港| 沙雅县| 元江| 新密市| 扎兰屯市| 福泉市| 宽城| 六安市| 融水| 分宜县| 聂拉木县| 威海市| 永顺县| 翁源县| 涪陵区| 永和县| 宜宾县|