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

vue中props值的傳遞詳解

 更新時(shí)間:2024年04月02日 10:13:06   作者:刻刻帝的海角  
這篇文章主要介紹了vue中props值的傳遞,在vue中父組件要正向的向子組件傳遞數(shù)據(jù)或者參數(shù),子組件接收到后根據(jù)參數(shù)的不同來進(jìn)行對(duì)應(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)容,這就會(huì)使用到 props。

prop值的傳遞

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

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

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

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

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

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

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

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

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

在實(shí)際應(yīng)用中,我們可能在父組件中會(huì)有如下的一個(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來傳遞動(dòng)態(tài) prop 值的。當(dāng)事先不知道要渲染的確切內(nèi)容時(shí),這一點(diǎn)特別有用。

監(jiān)聽事件?

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

在父組件中,我們可以添加一個(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)聽,父組件會(huì)接收這一事件,從而更新postFontSize的值。

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

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

這聲明了一個(gè)組件可能觸發(fā)的所有事件,還可以對(duì)事件的參數(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)定義組件會(huì)拋出的事件。你可以從setup()函數(shù)的第二個(gè)參數(shù),即 setup 上下文對(duì)象上訪問到emit函數(shù):

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

以上就是vue中prop值的傳遞詳解的詳細(xì)內(nèi)容,更多關(guān)于vue傳遞props的資料請(qǐng)關(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à)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue 樣式綁定的實(shí)現(xiàn)方法

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

    學(xué)習(xí) Vue 的時(shí)候覺得樣式綁定很簡(jiǎn)單,但是使用的時(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)移動(dòng)端圖片裁剪上傳功能

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

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端圖片裁剪上傳功能,文中示例代碼介紹的非常詳細(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)識(shí)vue之事件阻止冒泡的實(shí)現(xiàn)

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

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

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

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端多格輸入框,文中示例代碼介紹的非常詳細(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)境搭建?啟動(dòng)?移植操作示例及目錄結(jié)構(gòu)分析

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

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

最新評(píng)論

正定县| 池州市| 蓬莱市| 荣成市| 建始县| 临朐县| 福泉市| 青岛市| 苗栗市| 桂平市| 和龙市| 墨江| 长寿区| 青冈县| 望城县| 德昌县| 凉城县| 南皮县| 临沭县| 枣阳市| 昭通市| 彰武县| 孟连| 大竹县| 高台县| 谢通门县| 临清市| 东至县| 丹凤县| 玉溪市| 老河口市| 岱山县| 乾安县| 大港区| 德令哈市| 嘉善县| 霍州市| 卢龙县| 施甸县| 读书| 通城县|