vue組件間數(shù)據(jù)傳遞

props

父組件向子組件傳值

//父組件
<template>
  <home-child :name="name"/>
</template>
<script>
  data() {
    return {
      name: 'harry'
    }
  },
</script>
//子組件
<template>
  <div>父組件傳來的值Name:{{name}}</div>
</template>
<script>
  props: {
    name: String
  }
</script>
image.png

依賴注入

當組件層級過深時媚创,props就會比較麻煩渗钉,需要一層一層傳遞,這時我們可以使用依賴注入钞钙,一個父組件相對于其所有的后代組件鳄橘,會作為依賴提供者。任何后代的組件樹芒炼,無論層級有多深瘫怜,都可以注入由父組件提供給整條鏈路的依賴。

  • Provide (供給)
    要為組件后代供給數(shù)據(jù)本刽,需要使用到 provide 選項
    (為配合響應性鲸湃,我們可將供給的值轉(zhuǎn)換為一個計算屬性)
  • Inject (注入)
    要注入祖先組件供給的數(shù)據(jù),需使用 inject 選項
    注入可設置別名和默認值
//父組件
export default {
  provide: {
    message: 'hello'
  }
}
//子組件
<template>
  <div>依賴注入傳遞歸來的值message:{{message}}</div>
</template>

export default {
  inject: ['message']
}
image.png

$emit

在組件的模板表達式中子寓,可以直接使用$emit函數(shù)觸發(fā)自定義事件
$emit函數(shù)同樣也是組件實例上的方法:this.$emit()
父組件可以通過 v-on (縮寫為 @) 來監(jiān)聽事件

//父組件
<template>
  <home-child @btnClick = 'btnClick'/>
</template>

export default {
  methods: {
    btnClick() {
      alert('觸發(fā)事件')
    }
  }
}
//子組件
<template>
  <div class="box" @click="btnClick"></div>
</template>

export default {
  emits: ['btnClick'], //顯示的聲明要觸發(fā)的事件
  methods: {
    btnClick() {
      this.$emit('btnClick')
    }
  }
}
image.png

ref

  • ref 是一個特殊的 attribute暗挑,它允許我們在一個特定的 DOM 元素或子組件實例被掛載后,獲得對它的直接引用
  • 只可以在組件掛載后才能訪問 ref
  • 如果一個子組件使用的是選項式 API 斜友,被引用的組件實例和該子組件的 this 完全一致窿祥,這意味著父組件對子組件的每一個屬性和方法都有完全的訪問權。這使得在父組件和子組件之間創(chuàng)建緊密耦合的實現(xiàn)細節(jié)變得很容易蝙寨,當然也因此晒衩,應該只在絕對需要時才使用組件引用。大多數(shù)情況下墙歪,你應該首先使用標準的 props 和 emit 接口來實現(xiàn)父子組件交互
//父組件
<template>
  <home-child ref= 'home_child'/>
</template>

export default {
    mounted() {
      let child = this.$refs.home_child //拿到子組件的實例
      console.log(child.age); //11 訪問子組件的屬性
  }
}
//子組件
export default {
  data() {
    return {
      age: 11
    }
  }
}

vuex

如果業(yè)務邏輯復雜听系,很多組件需要處理一些相同的信息,采用普通的方式就會處理困難虹菲,vuex可以幫助我們把一些公共的數(shù)據(jù)抽離出來靠胜,便于其他組件處理,變更狀態(tài)

setup()

vue3提供了一種新方法來進行組件之間的數(shù)據(jù)傳遞setup()
我們在組件中用到的數(shù)據(jù)和方法,都定義在setup配置項中

//子組件
<template>
  <div class="home-child">
    <h4>子組件</h4>
    <div>父組件傳來的值: {{title}}</div>
    <button @click="btnClick">向父組件說話</button>
  </div>
</template>

<script>
export default {
  name: 'HomeChild',
  props: {
    title: String
  },
  setup(props, {emit}) {
    let ask = '我是子組件浪漠,我向父組件說話'
    const btnClick = () => {
      emit('btnClick', ask)
    }
    return {
      btnClick
    }
  }
}
</script>
//父組件
<template>
  <div id="home">
    <h3>父組件</h3>
    <div>子組件說:{{children_mes}}</div>
    <home-child :title="title" @btnClick='btnClick'/>
  </div>
</template>

<script>
import { ref } from 'vue'
import HomeChild from './childComps/HomeChild.vue'
export default {
  name: 'Home',
  components: {HomeChild},
  setup() {
    let title = '我是父組件傳來的值'
    let children_mes = ref('')
    const btnClick = mes => {
      children_mes.value = mes
    }
    return {
      title,
      children_mes,
      btnClick
    }
  }
}
</script>
image.png

當點擊按鈕時陕习,子組件向父組件發(fā)送信息


image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市址愿,隨后出現(xiàn)的幾起案子该镣,更是在濱河造成了極大的恐慌,老刑警劉巖响谓,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件损合,死亡現(xiàn)場離奇詭異,居然都是意外死亡娘纷,警方通過查閱死者的電腦和手機嫁审,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖晶,“玉大人律适,你說我怎么就攤上這事《舨澹” “怎么了擦耀?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涩堤。 經(jīng)常有香客問我眷蜓,道長,這世上最難降的妖魔是什么胎围? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任吁系,我火速辦了婚禮,結(jié)果婚禮上白魂,老公的妹妹穿的比我還像新娘汽纤。我一直安慰自己,他們只是感情好福荸,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布蕴坪。 她就那樣靜靜地躺著,像睡著了一般敬锐。 火紅的嫁衣襯著肌膚如雪背传。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天台夺,我揣著相機與錄音径玖,去河邊找鬼。 笑死颤介,一個胖子當著我的面吹牛梳星,可吹牛的內(nèi)容都是我干的赞赖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼冤灾,長吁一口氣:“原來是場噩夢啊……” “哼前域!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起韵吨,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤匿垄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后学赛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體年堆,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吞杭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年盏浇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽狗。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢掰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出童擎,到底是詐尸還是另有隱情滴劲,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布顾复,位于F島的核電站班挖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芯砸。R本人自食惡果不足惜萧芙,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望假丧。 院中可真熱鬧双揪,春花似錦、人聲如沸包帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渴邦。三九已至疯趟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谋梭,已是汗流浹背迅办。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留章蚣,地道東北人站欺。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓姨夹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矾策。 傳聞我的和親對象是個殘疾皇子磷账,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容