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

vue中props值的傳遞詳解

 更新時(shí)間:2024年04月02日 10:13:06   作者:刻刻帝的海角  
這篇文章主要介紹了vue中props值的傳遞,在vue中父組件要正向的向子組件傳遞數(shù)據(jù)或者參數(shù),子組件接收到后根據(jù)參數(shù)的不同來進(jìn)行對應(yīng)的渲染,這個(gè)正向的數(shù)據(jù)傳遞在vue組件中就是通過props來實(shí)現(xiàn)的,需要的朋友可以參考下

前言

如果我們正在構(gòu)建一個(gè)博客,我們可能需要一個(gè)表示博客文章的組件。我們希望所有的博客文章分享相同的視覺布局,但有不同的內(nèi)容。要實(shí)現(xiàn)這樣的效果自然必須向組件中傳遞數(shù)據(jù),例如每篇文章標(biāo)題和內(nèi)容,這就會使用到 props。

prop值的傳遞

Props 是一種特別的 attributes,你可以在組件上聲明注冊。要傳遞給博客文章組件一個(gè)標(biāo)題,我們必須在組件的 props 列表上聲明它。這里要用到defineProps宏:

<!-- BlogPost.vue -->
<script setup>
defineProps(['title'])
</script>
<template>
  <h4>{{ title }}</h4>
</template>

defineProps是一個(gè)僅<script setup>中可用的編譯宏命令,并不需要顯式地導(dǎo)入。聲明的 props 會自動暴露給模板。defineProps會返回一個(gè)對象,其中包含了可以傳遞給組件的所有 props:

const props = defineProps(['title'])
console.log(props.title)

如果你沒有使用<script setup>,props 必須以props選項(xiàng)的方式聲明,props 對象會作為setup()函數(shù)的第一個(gè)參數(shù)被傳入:

export default {
  props: ['title'],
  setup(props) {
    console.log(props.title)
  }
}

一個(gè)組件可以有任意多的 props,默認(rèn)情況下,所有 prop 都接受任意類型的值。

當(dāng)一個(gè) prop 被注冊后,可以像這樣以自定義 attribute 的形式傳遞數(shù)據(jù)給它:

<BlogPost title="My journey with Vue" />
<BlogPost title="Blogging with Vue" />
<BlogPost title="Why Vue is so fun" />

在實(shí)際應(yīng)用中,我們可能在父組件中會有如下的一個(gè)博客文章數(shù)組:

const posts = ref([
  { id: 1, title: 'My journey with Vue' },
  { id: 2, title: 'Blogging with Vue' },
  { id: 3, title: 'Why Vue is so fun' }
])

這種情況下,我們可以使用v-for來渲染它們:

<BlogPost
  v-for="post in posts"
  :key="post.id"
  :title="post.title"
 />

留意我們是如何使用v-bind來傳遞動態(tài) prop 值的。當(dāng)事先不知道要渲染的確切內(nèi)容時(shí),這一點(diǎn)特別有用。

監(jiān)聽事件?

讓我們繼續(xù)關(guān)注我們的<BlogPost>組件。我們會發(fā)現(xiàn)有時(shí)候它需要與父組件進(jìn)行交互。例如,要在此處實(shí)現(xiàn)無障礙訪問的需求,將博客文章的文字能夠放大,而頁面的其余部分仍使用默認(rèn)字號。

在父組件中,我們可以添加一個(gè)postFontSizeref來實(shí)現(xiàn)這個(gè)效果:

const posts = ref([
  /* ... */
])
const postFontSize = ref(1)

在模板中用它來控制所有博客文章的字體大?。?/p>

<div :style="{ fontSize: postFontSize + 'em' }">
  <BlogPost
    v-for="post in posts"
    :key="post.id"
    :title="post.title"
   />
</div>

然后,給<BlogPost>組件添加一個(gè)按鈕:

<!-- BlogPost.vue, 省略了 <script> -->
<template>
  <div class="blog-post">
    <h4>{{ title }}</h4>
    <button>Enlarge text</button>
  </div>
</template>

這個(gè)按鈕目前還沒有做任何事情,我們想要點(diǎn)擊這個(gè)按鈕來告訴父組件它應(yīng)該放大所有博客文章的文字。要解決這個(gè)問題,組件實(shí)例提供了一個(gè)自定義事件系統(tǒng)。父組件可以通過v-on@來選擇性地監(jiān)聽子組件上拋的事件,就像監(jiān)聽原生 DOM 事件那樣:

<BlogPost
  ...
  @enlarge-text="postFontSize += 0.1"
 />

子組件可以通過調(diào)用內(nèi)置的$emit方法,通過傳入事件名稱來拋出一個(gè)事件

<!-- BlogPost.vue, 省略了 <script> -->
<template>
  <div class="blog-post">
    <h4>{{ title }}</h4>
    <button @click="$emit('enlarge-text')">Enlarge text</button>
  </div>
</template>

因?yàn)橛辛?code>@enlarge-text="postFontSize += 0.1"的監(jiān)聽,父組件會接收這一事件,從而更新postFontSize的值。

我們可以通過defineEmits宏來聲明需要拋出的事件:

<!-- BlogPost.vue -->
<script setup>
defineProps(['title'])
defineEmits(['enlarge-text'])
</script>

這聲明了一個(gè)組件可能觸發(fā)的所有事件,還可以對事件的參數(shù)進(jìn)行驗(yàn)證。同時(shí),這還可以讓 Vue 避免將它們作為原生事件監(jiān)聽器隱式地應(yīng)用于子組件的根元素。

defineProps類似,defineEmits僅可用于<script setup>之中,并且不需要導(dǎo)入,它返回一個(gè)等同于$emit方法的emit函數(shù)。它可以被用于在組件的<script setup>中拋出事件,因?yàn)榇颂師o法直接訪問$emit

<script setup>
const emit = defineEmits(['enlarge-text'])
emit('enlarge-text')
</script>

如果你沒有在使用<script setup>,你可以通過emits選項(xiàng)定義組件會拋出的事件。你可以從setup()函數(shù)的第二個(gè)參數(shù),即 setup 上下文對象上訪問到emit函數(shù):

export default {
  emits: ['enlarge-text'],
  setup(props, ctx) {
    ctx.emit('enlarge-text')
  }
}

以上就是vue中prop值的傳遞詳解的詳細(xì)內(nèi)容,更多關(guān)于vue傳遞props的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue中控制mock在開發(fā)環(huán)境使用,在生產(chǎn)環(huán)境禁用方式

    vue中控制mock在開發(fā)環(huán)境使用,在生產(chǎn)環(huán)境禁用方式

    這篇文章主要介紹了vue中控制mock在開發(fā)環(huán)境使用,在生產(chǎn)環(huán)境禁用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue 樣式綁定的實(shí)現(xiàn)方法

    Vue 樣式綁定的實(shí)現(xiàn)方法

    學(xué)習(xí) Vue 的時(shí)候覺得樣式綁定很簡單,但是使用的時(shí)候總是容易搞暈自己。這篇文章主要介紹了Vue 樣式綁定的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2019-01-01
  • vue 實(shí)現(xiàn)圖片懶加載功能

    vue 實(shí)現(xiàn)圖片懶加載功能

    這篇文章主要介紹了vue 實(shí)現(xiàn)圖片懶加載功能的方法,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • vue3遞歸組件封裝的全過程記錄

    vue3遞歸組件封裝的全過程記錄

    組件是可以在自己的模板中調(diào)用自身的,不過他們只能通過name選項(xiàng)來做這件事,下面這篇文章主要給大家介紹了關(guān)于vue3遞歸組件封裝的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue實(shí)現(xiàn)移動端圖片裁剪上傳功能

    vue實(shí)現(xiàn)移動端圖片裁剪上傳功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動端圖片裁剪上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • VUE正則表達(dá)式用法全集整理(推薦!)

    VUE正則表達(dá)式用法全集整理(推薦!)

    正則表達(dá)式是由一些特定的字符組成,代表一個(gè)規(guī)則,可以用來檢驗(yàn)數(shù)據(jù)格式是否合法,也可以在一段文本中查找滿足要求的內(nèi)容,這篇文章主要給大家介紹了關(guān)于VUE正則表達(dá)式用法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 重新認(rèn)識vue之事件阻止冒泡的實(shí)現(xiàn)

    重新認(rèn)識vue之事件阻止冒泡的實(shí)現(xiàn)

    這篇文章主要介紹了重新認(rèn)識vue之事件阻止冒泡的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • vue實(shí)現(xiàn)移動端多格輸入框

    vue實(shí)現(xiàn)移動端多格輸入框

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動端多格輸入框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vuex新手進(jìn)階篇之取值

    vuex新手進(jìn)階篇之取值

    Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于vuex新手進(jìn)階篇之取值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • vue項(xiàng)目環(huán)境搭建?啟動?移植操作示例及目錄結(jié)構(gòu)分析

    vue項(xiàng)目環(huán)境搭建?啟動?移植操作示例及目錄結(jié)構(gòu)分析

    這篇文章主要介紹了vue項(xiàng)目環(huán)境搭建、啟動、項(xiàng)目移植、項(xiàng)目目錄結(jié)構(gòu)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評論

皋兰县| 肇东市| 鹿邑县| 渝中区| 灵台县| 彝良县| 蒙山县| 永济市| 崇礼县| 桐庐县| 万载县| 若羌县| 枞阳县| 柳州市| 苍溪县| 宝坻区| 维西| 上犹县| 屯留县| 荣昌县| 灵寿县| 澄城县| 肃北| 中卫市| 大方县| 如东县| 兴城市| 容城县| 淳化县| 清徐县| 饶平县| 大埔区| 灌阳县| 鄂尔多斯市| 新蔡县| 公安县| 溆浦县| 长垣县| 柳州市| 浠水县| 于都县|