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

vue中props值的傳遞詳解

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

前言

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

prop值的傳遞

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

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

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

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

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

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

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

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

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

在實際應(yīng)用中,我們可能在父組件中會有如下的一個博客文章數(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 值的。當事先不知道要渲染的確切內(nèi)容時,這一點特別有用。

監(jiān)聽事件?

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

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

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>組件添加一個按鈕:

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

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

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

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

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

因為有了@enlarge-text="postFontSize += 0.1"的監(jiān)聽,父組件會接收這一事件,從而更新postFontSize的值。

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

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

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

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

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

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

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

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

相關(guān)文章

  • Vue實現(xiàn)數(shù)據(jù)請求攔截

    Vue實現(xiàn)數(shù)據(jù)請求攔截

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)數(shù)據(jù)請求攔截,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Vue中的vue-resource示例詳解

    Vue中的vue-resource示例詳解

    Vue與后臺Api進行交互通常是利用vue-resource來實現(xiàn)的,本質(zhì)上vue-resource是通過http來完成AJAX請求相應(yīng)的。這篇文章主要介紹了Vue中的vue-resource示例詳解,需要的朋友可以參考下
    2018-11-11
  • VUE簡單的定時器實時刷新的實現(xiàn)方法

    VUE簡單的定時器實時刷新的實現(xiàn)方法

    這篇文章主要介紹了VUE簡單的定時器實時刷新的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • vue實現(xiàn)商品購物車全選反選

    vue實現(xiàn)商品購物車全選反選

    這篇文章主要為大家詳細介紹了vue實現(xiàn)商品購物車全選反選,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • VUE入門學(xué)習(xí)之事件處理

    VUE入門學(xué)習(xí)之事件處理

    這篇文章主要介紹了vue事件處理原理及過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • 淺析vue給不同環(huán)境配置不同打包命令

    淺析vue給不同環(huán)境配置不同打包命令

    本文分步驟給大家介紹vue給不同環(huán)境配置不同打包命令的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 用Vue.extend構(gòu)建消息提示組件的方法實例

    用Vue.extend構(gòu)建消息提示組件的方法實例

    本篇文章主要介紹了用Vue.extend構(gòu)建消息提示組件的方法實例,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • vue項目中使用Svg的方法

    vue項目中使用Svg的方法

    本文主要以 vue-cli3 搭建的項目為例,來聊一下如何在項目中更優(yōu)雅的使用 svg 。感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • 安裝@vue/cli 報錯npm WARN deprecated request@2.88.2問題

    安裝@vue/cli 報錯npm WARN deprecated request

    這篇文章主要介紹了安裝@vue/cli 報錯npm WARN deprecated request@2.88.2問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • VUE中template的三種寫法

    VUE中template的三種寫法

    這篇文章介紹了VUE中template的三種寫法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論