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

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

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

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

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

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

父子通信「props / $emit」

父傳子

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

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

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

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

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

<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>

瀏覽器效果:

子傳父

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

<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監聽子組件的事件并接收傳遞過來的值然后再觸發這邊的事件,從而達到子傳父的目的。

<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,也就是在一個合適的地方創建一個EvenBus.js,然后內部如下:

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

export default eventBus

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

然后我將兩個組件放在App組件內,分別是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,然后通過點擊事件觸發事件,然后這里回應為什么要實例,因為每個實例都有emit 方法,當然也有監聽 $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鉤子函數中監聽這個$on事件,并觸發這里的方法,從而讓兩個組件產生通信,然后就是這里的方法接收值并使用值了

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

然后我們看瀏覽器如下

責任編輯:武曉燕 來源: 零零后程序員小三
相關推薦

2009-11-06 12:59:56

WCF服務通信

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定時器網絡協議

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

負載平衡技術

2011-03-23 11:22:14

oracle dbli

2010-07-14 10:30:26

Perl多線程

2024-09-20 11:32:28

.NET內存管理

2010-07-15 14:38:55

Perl eval函數

2010-08-03 13:27:04

FlexBuilder
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品成人一区二区 | 欧美大片一区二区 | 国产美女一区二区 | 爱草在线| 久久久久久久国产 | 日韩黄a| 91社区在线高清 | 蜜桃在线视频 | 亚洲天堂日韩精品 | 精品一二区 | 日韩一区二区成人 | 在线一区视频 | 免费看黄色小视频 | 日韩久久久久久 | 91视频88av | 美女日批免费视频 | 色屁屁在线观看 | 久久亚洲国产精品 | 国产乱码精品一区二区三区五月婷 | 国产精品完整版 | 这里只有精品99re | 国产不卡视频在线 | 午夜国产一级 | 日韩亚洲欧美综合 | 亚洲国产一区二区三区在线观看 | 久久视频免费看 | 日韩av中文 | 婷婷丁香综合网 | 亚洲精选一区二区 | 国产1区 | 337p日本欧洲亚洲大胆精蜜臀 | 久久久久久av | 99精品久久久久 | 久久日韩粉嫩一区二区三区 | 黄色香蕉视频在线观看 | 天天干.com | 国产这里只有精品 | 午夜精品久久久久久久久久久久久 | 中文字幕日韩欧美 | 国产成人精品视频在线观看 | 久久精品黄色 |