Vue2.0的三種常用傳值方式势篡、父?jìng)髯印⒆觽鞲改0怠⒎歉缸咏M件傳值

Vue2.0 傳值方式:

???????在Vue的框架開(kāi)發(fā)的項(xiàng)目過(guò)程中禁悠,經(jīng)常會(huì)用到組件來(lái)管理不同的功能,有一些公共的組件會(huì)被提取出來(lái)兑宇。這時(shí)必然會(huì)產(chǎn)生一些疑問(wèn)和需求碍侦?比如一個(gè)組件調(diào)用另一個(gè)組件作為自己的子組件,那么我們?nèi)绾芜M(jìn)行給子組件進(jìn)行傳值呢隶糕?如果是電商網(wǎng)站系統(tǒng)的開(kāi)發(fā)瓷产,還會(huì)涉及到購(gòu)物車的選項(xiàng),這時(shí)候就會(huì)涉及到非父子組件傳值的情況枚驻。當(dāng)然你也可以用Vuex狀態(tài)管理工具來(lái)實(shí)現(xiàn)濒旦,這部分我們后續(xù)會(huì)單獨(dú)介紹。我先給大家介紹Vue開(kāi)發(fā)中常用的三種傳值方式测秸。

Vue常用的三種傳值方式有:
1.父?jìng)髯?br> 2.子傳父
3.非父子傳值

???????引用官網(wǎng)的一句話:父子組件的關(guān)系可以總結(jié)為 prop 向下傳遞疤估,事件向上傳遞。父組件通過(guò) prop 給子組件下發(fā)數(shù)據(jù)霎冯,子組件通過(guò)事件給父組件發(fā)送消息铃拇,如下圖所示:

image.png
接下來(lái),我們通過(guò)實(shí)例來(lái)看可能會(huì)更明白一些:
1. 父組件向子組件進(jìn)行傳值
image.png

父組件:

<template>
  <div>
    父組件:
    <input type="text" v-model="name">
    <br>
    <br>
    <!-- 引入子組件 -->
    <child :inputName="name"></child>
  </div>
</template>
<script>
  import child from './child'
  export default {
    components: {
      child
    },
    data () {
      return {
        name: ''
      }
    }
  }
</script>

子組件:

<template>
  <div>
    子組件:
    <span>{{inputName}}</span>
  </div>
</template>
<script>
  export default {
    // 接受父組件的值
    props: {
      inputName: String,
      required: true
    }
  }
</script>
2. 子組件向父組件傳值
image.png

子組件:

<template>
  <div>
    子組件:
    <span>{{childValue}}</span>
    <!-- 定義一個(gè)子組件傳值的方法 -->
    <input type="button" value="點(diǎn)擊觸發(fā)" @click="childClick">
  </div>
</template>
<script>
  export default {
    data () {
      return {
        childValue: '我是子組件的數(shù)據(jù)'
      }
    },
    methods: {
      childClick () {
        // childByValue是在父組件on監(jiān)聽(tīng)的方法
        // 第二個(gè)參數(shù)this.childValue是需要傳的值
        this.$emit('childByValue', this.childValue)
      }
    }
  }
</script>

父組件:

<template>
  <div>
    父組件:
    <span>{{name}}</span>
    <br>
    <br>
    <!-- 引入子組件 定義一個(gè)on的方法監(jiān)聽(tīng)子組件的狀態(tài)-->
    <child v-on:childByValue="childByValue"></child>
  </div>
</template>
<script>
  import child from './child'
  export default {
    components: {
      child
    },
    data () {
      return {
        name: ''
      }
    },
    methods: {
      childByValue: function (childValue) {
        // childValue就是子組件傳過(guò)來(lái)的值
        this.name = childValue
      }
    }
  }
</script>
3. 非父子組件進(jìn)行傳值

非父子組件之間傳值沈撞,需要定義個(gè)公共的公共實(shí)例文件bus.js慷荔,作為中間倉(cāng)庫(kù)來(lái)傳值,不然路由組件之間達(dá)不到傳值的效果缠俺。

公共bus.js

//bus.js
import Vue from 'vue'
export default new Vue()

組件A:

<template>
  <div>
    A組件:
    <span>{{elementValue}}</span>
    <input type="button" value="點(diǎn)擊觸發(fā)" @click="elementByValue">
  </div>
</template>
<script>
  // 引入公共的bug显晶,來(lái)做為中間傳達(dá)的工具
  import Bus from './bus.js'
  export default {
    data () {
      return {
        elementValue: 4
      }
    },
    methods: {
      elementByValue: function () {
        Bus.$emit('val', this.elementValue)
      }
    }
  }
</script>

組件B:

<template>
  <div>
    B組件:
    <input type="button" value="點(diǎn)擊觸發(fā)" @click="getData">
    <span>{{name}}</span>
  </div>
</template>
<script>
  import Bus from './bus.js'
  export default {
    data () {
      return {
        name: 0
      }
    },
    mounted: function () {
      var vm = this
      // 用$on事件來(lái)接收參數(shù)
      Bus.$on('val', (data) => {
        console.log(data)
        vm.name = data
      })
    },
    methods: {
      getData: function () {
        this.name++
      }
    }
  }
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贷岸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子磷雇,更是在濱河造成了極大的恐慌偿警,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯笙,死亡現(xiàn)場(chǎng)離奇詭異螟蒸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)崩掘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門七嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人苞慢,你說(shuō)我怎么就攤上這事诵原。” “怎么了挽放?”我有些...
    開(kāi)封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵绍赛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我骂维,道長(zhǎng)惹资,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任航闺,我火速辦了婚禮褪测,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘潦刃。我一直安慰自己侮措,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布乖杠。 她就那樣靜靜地躺著分扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胧洒。 梳的紋絲不亂的頭發(fā)上畏吓,一...
    開(kāi)封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音卫漫,去河邊找鬼菲饼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛列赎,可吹牛的內(nèi)容都是我干的宏悦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饼煞!你這毒婦竟也來(lái)了源葫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤砖瞧,失蹤者是張志新(化名)和其女友劉穎息堂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芭届,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡储矩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年感耙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褂乍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡即硼,死狀恐怖逃片,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情只酥,我是刑警寧澤褥实,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站裂允,受9級(jí)特大地震影響损离,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绝编,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一僻澎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧十饥,春花似錦窟勃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜒秤,卻和暖如春汁咏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背作媚。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工攘滩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掂骏。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓轰驳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子级解,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • 前言 您將在本文當(dāng)中了解到,往網(wǎng)頁(yè)中添加數(shù)據(jù),從傳統(tǒng)的dom操作過(guò)渡到數(shù)據(jù)層操作,實(shí)現(xiàn)同一個(gè)目標(biāo),兩種不同的方式....
    itclanCoder閱讀 25,806評(píng)論 1 12
  • 組件(Component)是Vue.js最核心的功能冒黑,也是整個(gè)架構(gòu)設(shè)計(jì)最精彩的地方,當(dāng)然也是最難掌握的勤哗。...
    六個(gè)周閱讀 5,617評(píng)論 0 32
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容抡爹,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,050評(píng)論 0 29
  • 什么是組件芒划? 組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一冬竟。組件可以擴(kuò)展 HTML 元素,封裝...
    youins閱讀 9,481評(píng)論 0 13
  • 4.25 書名《不要讓未來(lái)的你討厭現(xiàn)在的自己》 作者 一直特立獨(dú)行的貓 時(shí)間:0.5小時(shí) 頁(yè)數(shù):167-230 進(jìn)...
    Lea李小翼閱讀 115評(píng)論 0 0