成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue的兩種常見通信方式,你了解嗎?

網(wǎng)絡(luò) 通信技術(shù)
vue組件化開發(fā)是一個非常美妙的過程,因為減少了代碼之間的耦合度,提高了復(fù)用性,直接就是我們開發(fā)人員的福音。

vue組件化開發(fā)是一個非常美妙的過程,因為減少了代碼之間的耦合度,提高了復(fù)用性,直接就是我們開發(fā)人員的福音。

但是組件歸組件,組件之間也有幾種不同的關(guān)系,不同的關(guān)系要有對應(yīng)的通信方法才是道理,比如組件之間關(guān)系圖就像是下面的一樣,組件還不止這些,那這些復(fù)雜的組件通信應(yīng)該怎么處理呢?

接下來我將介紹一下vue常見的兩種種組件通信方式。

父子通信「props / $emit」

父傳子

我想從父組件傳一個數(shù)據(jù)給子組件,也就是上圖的從app組件傳到A組件,我可以先在App.vue組件定義一個數(shù)組,然后通過v-bind的方式綁定到子組件。

<template>
<div id="app">
<Child :ancient='ancient'/>
</div>
</template>

<script>
import Child from './views/Child.vue'
export default {
data () {
return {
ancient: ['床前明月光', '疑似地上霜', '舉頭望明月', '低頭思故鄉(xiāng)']
}
},
methods: {

},
components: {
Child
}
}
</script>

然后再在子組件通過props接收,然后循環(huán)渲染上去就好啦!

<template>
<div>
<ul>
<h2>靜夜思</h2>
<h4>李白</h4>
<li v-for="item in ancient" :key="item">{{ item }}</li>
</ul>
</div>
</template>
<script>
export default {
props: {
ancient: {
type: Array,
required: true
}
},
data () {
return {
demoList: [111, 222, 333]
}
}
}
</script>

瀏覽器效果:

子傳父

想在子組件傳參數(shù)給父組件,首先我們在子組件創(chuàng)建一個點擊事件,然后我們通過點擊觸發(fā)$emit事件將想要傳遞的值發(fā)送過去。

<template>
<div>
<input type="text" v-model="myText">
<button @click="handleClick">提交</button>
</div>
</template>
<script>
export default {
data () {
return {
myText: '請寫出你的計劃'
}
},
methods: {
handleClick () {
console.log(this.myText)
this.$emit('setMessage', this.myText)
this.myText = ''
}
}
}
</script>

然后我們在父組件通過on監(jiān)聽子組件的事件并接收傳遞過來的值然后再觸發(fā)這邊的事件,從而達到子傳父的目的。

<template>
<div id="app">
<Child v-on:setMessage="getMessage"/>
<ul>
<li v-for="item in demoList" :key="item">{{item}}</li>
</ul>
</div>
</template>

<script>
import Child from './views/Child.vue'
export default {
data () {
return {
demoList: ['計劃1', '計劃2', '計劃3']
}
},
methods: {
getMessage (text) {
this.demoList.push(text)
}
},
components: {
Child
}
}
</script>

瀏覽器如下表示:

兄弟通信

兄弟通信比較推薦用bus通信,因為可以直接兩個組件之間互相通信從而省去了子傳父再傳子兩個步驟。

首先先聲明一輛bus,也就是在一個合適的地方創(chuàng)建一個EvenBus.js,然后內(nèi)部如下:

import Vue from 'vue'
const eventBus = new Vue()

export default eventBus

然后有人可能會疑惑為什么要這樣引入vue實例。先帶著這個疑問繼續(xù)看下去。

然后我將兩個組件放在App組件內(nèi),分別是BroderB.vue和BroderD.vue。

APP.vue

<template>
<div id="app">
<BorderB />
<BorderD />
</div>
</template>

<script>
import BorderB from './views/BroderB.vue'
import BorderD from './views/BroderD.vue'
export default {
data () {
return {

}
},
methods: {

},
components: {
BorderB,
BorderD
}
}
</script>

然后我們先看BroderB.vue

<template>
<div>
<input type="text" v-model="myText">
<button @click="handleClick">提交</button>
</div>
</template>
<script>
import evenBus from '../util/EvenBus'
export default {
data () {
return {
myText: ''
}
},
methods: {
handleClick () {
evenBus.$emit('setMessage', this.myText)
}
}
}
</script>

我這里引入了EvenBus,然后通過點擊事件觸發(fā)事件,然后這里回應(yīng)為什么要實例,因為每個實例都有emit 方法,當然也有監(jiān)聽 $on 方法。然后傳遞這個事件和值出去。

然后再在BroderD.vue接收

<template>
<div>
<h1 v-for="item in demoList" :key="item">{{item}}</h1>
</div>
</template>
<script>
import evenBus from '../util/EvenBus'
export default {
data () {
return {
demoList: ['111', '222', '333']
}
},
methods: {
handleGet (msg) {
this.demoList.push(msg)
}
},
mounted () {
evenBus.$on('setMessage', this.handleGet)
},
beforeDestroy () {
evenBus.$off('setMessage', this.handleGet)
}
}
</script>

在這個組件的mounted鉤子函數(shù)中監(jiān)聽這個$on事件,并觸發(fā)這里的方法,從而讓兩個組件產(chǎn)生通信,然后就是這里的方法接收值并使用值了

然后也有人會問,為什么后面還有一個beforeDestroy的鉤子函數(shù),那肯定是有作作用的,當我們結(jié)束這個組件的時候最好就是讓這個evenBus解綁,因為如果在項目中的話,可能會存在某些奇奇怪怪的問題。

然后我們看瀏覽器如下

責(zé)任編輯:武曉燕 來源: 零零后程序員小三
相關(guān)推薦

2009-11-06 12:59:56

WCF服務(wù)通信

2022-02-02 21:29:39

路由模式Vue-Router

2019-08-09 09:00:40

cp命令BashLinux

2011-03-03 10:26:04

Pureftpd

2021-05-27 10:57:01

TCP定時器網(wǎng)絡(luò)協(xié)議

2025-01-16 08:38:34

2009-06-25 13:43:00

Buffalo AJA

2010-10-21 16:24:18

sql server升

2010-08-06 09:38:11

Flex讀取XML

2023-03-29 13:06:36

2010-09-07 11:09:59

2014-10-11 16:58:24

TDD-LTEFDD-LTE4G

2021-01-06 08:48:35

CSS 命名模塊

2010-07-27 15:03:37

Flex ArrayC

2010-05-10 18:19:00

負載平衡技術(shù)

2024-09-20 11:32:28

.NET內(nèi)存管理

2010-07-14 10:30:26

Perl多線程

2011-03-23 11:22:14

oracle dbli

2010-07-15 14:38:55

Perl eval函數(shù)

2010-08-03 13:27:04

FlexBuilder
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天综合网天天综合色 | 国产成人免费视频 | 久草精品视频 | 日韩精品二区 | 日本在线一二 | 久久不卡日韩美女 | 国产精品视频一区二区三区 | 国产午夜亚洲精品不卡 | 一区二区视频在线 | 亚洲成av| 欧美一区二区三区在线观看 | 精品毛片视频 | 国产aⅴ爽av久久久久久久 | 国产午夜精品视频 | 中文字幕亚洲一区二区三区 | 亚洲免费人成在线视频观看 | 黄色在线免费观看 | 国产高清在线精品一区二区三区 | 91av在线电影 | www亚洲精品| 日韩欧美字幕 | 91视频官网 | 免费一区 | 美女爽到呻吟久久久久 | 亚洲第一网站 | 国产精品久久av | 国产一区91精品张津瑜 | 日韩精品一 | 国产精品视频偷伦精品视频 | 国产亚洲欧美日韩精品一区二区三区 | 久草在线视频中文 | 天堂中文av| 亚洲精品日本 | h网站在线观看 | av男人的天堂av | 久久天天躁狠狠躁夜夜躁2014 | 99久久99久久精品国产片果冰 | 一本一道久久a久久精品蜜桃 | 久草综合在线视频 | 色综合久久久 | 91正在播放 |