国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布)

這篇具有很好參考價(jià)值的文章主要介紹了Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

目錄

前言

父子組件

父?jìng)髯?/p>

子傳父

全局事件總線

什么叫全局事件總線

如何創(chuàng)建全局事件總線

如何在組件上獲取到這個(gè)全局vc對(duì)象

最常用的創(chuàng)建全局事件總線

兄弟組件

消息訂閱與發(fā)布

安裝

使用

爺孫組件


前言

在上篇文章我們介紹了父子組件之間的傳值通信,本文將介紹不僅限于父子組件之間的傳值通信,還包括兄弟組件、爺孫組件之間的通信傳值。以下方法暫未涉及到Vue3中新提供的方法

父子組件

父?jìng)髯?/h3>

在父組件中

給需要傳遞數(shù)值的子組件綁定屬性

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
  <div id="app">
    <MySon name="zs" age=20 gender="男"></MySon>
    
  </div>
</template>

<script>
import MySon from './components/MySon.vue'

export default {
  name: 'App',
  components: {
    MySon
  }
}
</script>

在子組件中

使用props配置項(xiàng)接收

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
 <div>
  姓名:{{ name }}
  年齡:{{ age }}
  性別:{{ gender }}
 </div>
</template>

<script>
export default {
  name:'MySon',
  props:['name','age','gender']
}
</script>

傳遞成功,在頁(yè)面上成功渲染

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

以上介紹的是基本的而props配置項(xiàng),props詳情配置項(xiàng)請(qǐng)看這篇文章

子傳父

在父組件中

@自定義事件名='回調(diào)函數(shù)'

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
  <div id="app">
    <MySon  @event1="think"></MySon>
    
  </div>
</template>

<script>
import MySon from './components/MySon.vue'

export default {
  name: 'App',
  components: {
    MySon
  },
  methods:{
    think(name,age,gender){
      console.log(name,age,gender);
    }
  }
}
</script>

也可以通過(guò)代碼來(lái)實(shí)現(xiàn)自定義事件綁定

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

在子組件用

ref='組件名'

在mounted鉤子函數(shù)中

this.$refs.ref定義的組件名.$on('自定義的事件名',函數(shù))

<template>
  <div id="app">
    <MySon  ref="MySon"></MySon>
  </div>
</template>

<script>
import MySon from './components/MySon.vue'

export default {
  name: 'App',
  components: {
    MySon
  },
  methods:{
    think(name,age,gender){
      console.log(name,age,gender);
    }
  },
  mounted(){
    this.$refs.MySon.$on('event1',this.think)
  }
}
</script>

在子組件中

this.$emit('自定義事件名',傳遞的數(shù)值)

將子組件中數(shù)值傳給父組件

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

傳遞成功

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

全局事件總線

什么叫全局事件總線

在介紹兄弟組件和爺孫組件前,先介紹全局事件總線

由上面的子組件向父組件傳遞數(shù)值可以得出

$on:是用來(lái)綁定事件的

$emit:是用來(lái)觸發(fā)事件的

例:

子組件向父組件傳遞數(shù)值

所以子組件使用的是$emit

父組件使用的是$on

全局事件總線就是在所有的組件外面定義一個(gè)全局的vc對(duì)象,由上面的例子可得

不論是在父組件中用來(lái)綁定事件的$on前的

this.$refs.組件實(shí)例

還是在子組件中用來(lái)觸發(fā)事件的$emit前的

this

都是指向vc組件實(shí)例的,說(shuō)明vc實(shí)例身上是同時(shí)擁有$on和$emit的

此時(shí)我們定義一個(gè)全局的vc對(duì)象,所有的組件都可以共享

那么我們定義的這個(gè)全局的vc對(duì)象就叫做全局事件總線

如何創(chuàng)建全局事件總線

既然是創(chuàng)建全局事件對(duì)象,所以我們找到main.js文件

使用

vue.extend({})

創(chuàng)建構(gòu)造函數(shù)

再 new 一個(gè)vc實(shí)例對(duì)象

// 獲取VueComponent構(gòu)造函數(shù)
const VueComponent = Vue.extend({})
// 創(chuàng)建共享的vc對(duì)象
const globalvc = new VueComponent()

如何在組件上獲取到這個(gè)全局vc對(duì)象

利用vue的原型對(duì)象,vue做了特殊處理,vc也可以獲取到vue原型對(duì)象身上的屬性

vue.prototype.任意的屬性名=我們創(chuàng)建的vc對(duì)象

// 拓展原型對(duì)象的屬性
Vue.prototype.x=globalvc

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

// 獲取VueComponent構(gòu)造函數(shù)
const VueComponent = Vue.extend({})
// 創(chuàng)建共享的vc對(duì)象
const globalvc = new VueComponent()
// 拓展原型對(duì)象的屬性
Vue.prototype.x=globalvc

最常用的創(chuàng)建全局事件總線

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

new Vue({
  render: h => h(App),
  beforeCreate(){
    Vue.prototype.$bus=this
  }
}).$mount('#app')

兄弟組件

由上可知全局事件總線可以給任意的組件之間進(jìn)行通信

將MyBrother組件上的數(shù)據(jù)傳給兄弟組件MySon

在MySon組件中

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
 <div>
  <button @click="think2()">傳遞</button>
 </div>
</template>
<script>
export default {
  name:'MySon',
  data(){
    return {
      name:'haha',
      age:18,
      gender:'女'
    }
  },
  mounted(){
    this.x.$on('event2',this.think3)
  },
  methods:{
    think2(){
      this.$emit('event1',this.name,this.age,this.gender)
    },
    think3(name,age,gender){
     this.name=name
     this.age=age
     this.gender=gender
    }
  }
}
</script>

在MyBrother組件中

將data中的數(shù)值傳給MySon

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
  <div>
    <button @click="emit">發(fā)送</button>
  </div>
</template>

<script>
export default {
   name:'MyBrother',
    data(){
        return {
            name:'兄弟',
            age:20,
            gender:'男'
        }
    },
    methods:{
        emit(){
            this.x.$emit('event2',this.name,this.age,this.gender)
        }
    }
}
</script>

原MySon中的data數(shù)據(jù)

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

當(dāng)觸發(fā)自定義事件時(shí),也就是將MyBrother組件中的數(shù)值傳過(guò)去

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

成功傳遞

消息訂閱與發(fā)布

與全局事件總線一樣可以在任何組件之間通信(但是不常用,建議用全局事件總線)

分為消息發(fā)布方和消息訂閱方

需要安裝js第三方庫(kù)

pubsub-js

pub:publish(發(fā)布)

sub:subscribe(訂閱)

安裝

npm i pubsub-js

使用

發(fā)布消息:

?pubsub.publish('自定義發(fā)布消息的名稱',發(fā)布的消息)

訂閱消息:

后接回調(diào)函數(shù),第一個(gè)參數(shù)是自定義發(fā)布消息的名稱,第二個(gè)參數(shù)是發(fā)布的消息

? pubsub.subscribe('與發(fā)布消息自定義的名稱一致',function(messageName,message){})

注意,在組件中使用時(shí),需要先導(dǎo)入import

爺孫組件

在孫組件中

發(fā)布消息,將數(shù)據(jù)傳給爺爺組件

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
  <div>
    <button @click="think">發(fā)布消息</button>
  </div>
</template>

<script>
import pubsub from 'pubsub-js'
export default {
    name:'GrandSon',
    data(){
        return {
            msg:'消息發(fā)布成功'
        }
    },
    methods:{
        think(){
            pubsub.publish('發(fā)布消息',this.msg)
        }
    }
}
</script>

在爺爺組件中

在mounted鉤子函數(shù)中

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript

<template>
  <div id="app">
    <GrandSon></GrandSon>
  </div>
</template>

<script>
import pubsub from 'pubsub-js'
import GrandSon from './components/GrandSon.vue';
export default {
  name: 'App',
  components: {
    GrandSon
  },
  mounted(){
    pubsub.subscribe('發(fā)布消息',function(messageName,message){
      console.log(messageName,message);
    })
  }
}
</script>

效果

成功傳遞了數(shù)據(jù)

Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布),vue,前端,vue.js,javascript文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-751374.html

到了這里,關(guān)于Web前端 ---- 【vue】vue 組件傳值(props、全局事件總線、消息的訂閱與發(fā)布)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端vue中父子組件之間的傳值(修改值)和事件的相互調(diào)用

    目錄 父組件向子組件傳值 子組件修改父組件中的值: 方法1 方法2 子組件調(diào)用父組件里的函數(shù) 方法1 方法2 父組件調(diào)用子組件的函數(shù) : 子組件中的 data 屬性是用來(lái)存儲(chǔ)子組件自身的數(shù)據(jù),而不是用來(lái)接收父組件傳遞的數(shù)據(jù)的。父組件向子組件傳遞數(shù)據(jù)的常用方式是通過(guò) pro

    2024年02月07日
    瀏覽(91)
  • Vue前端框架10 組件的組成、組件嵌套關(guān)系、組件的注冊(cè)方式、組件傳遞數(shù)據(jù)(props $emit)、數(shù)組傳遞多種數(shù)據(jù)類型、組件傳遞props校驗(yàn)、組件事件

    組件最大的優(yōu)勢(shì)就是可復(fù)用性 通常將組件定義在.vue中,也就是SFC單文件組件 組件的基本組成: 組件允許我們將UI劃分為獨(dú)立的、可重用的部分,并且對(duì)每個(gè)部分單獨(dú)思考 實(shí)際應(yīng)用中組件常常被組件成層層嵌套的樹狀結(jié)構(gòu) Vue組件使用前要注冊(cè),注冊(cè)有兩種方式:全局注冊(cè)和

    2024年02月09日
    瀏覽(42)
  • vue3父組件異步props傳值,子組件接收不到值問(wèn)題

    當(dāng)我們使用vue3進(jìn)行開發(fā)在創(chuàng)建組件的時(shí)候,子組件經(jīng)常需要調(diào)用父組件的數(shù)據(jù),那么這是就需要vue3的props進(jìn)行對(duì)父組件與子組件通信來(lái)達(dá)到傳值的效果 在使用props進(jìn)行父子組件通信時(shí),子組件無(wú)法成功渲染數(shù)據(jù),導(dǎo)致拿到數(shù)據(jù)為空問(wèn)題 提示:這里填寫問(wèn)題的分析: 在使用

    2024年02月11日
    瀏覽(21)
  • Vue:父子組件傳值( props、sync、v-model )

    子組件通過(guò)$emit方法,通過(guò)自定義事件的方式將自身的值傳遞給父組件 在有些情況下,我們可能需要對(duì)一個(gè) prop 進(jìn)行“雙向綁定”。不幸的是,真正的雙向綁定會(huì)帶來(lái)維護(hù)上的問(wèn)題,因?yàn)樽咏M件可以變更父組件,且在父組件和子組件兩側(cè)都沒(méi)有明顯的變更來(lái)源。 所以推薦以

    2023年04月08日
    瀏覽(26)
  • watch監(jiān)聽(tīng),解決Vue3父組件異步props傳值,子組件接收不到的問(wèn)題

    watch監(jiān)聽(tīng),解決Vue3父組件異步props傳值,子組件接收不到的問(wèn)題

    寫靜態(tài)數(shù)據(jù)的時(shí)候父組件傳值子組件接收并渲染是沒(méi)問(wèn)題的,但當(dāng)父組件異步獲取數(shù)據(jù),子組件接收數(shù)據(jù)會(huì)晚于渲染,就會(huì)產(chǎn)生接收不到的問(wèn)題,我在用echarts繪制圖表時(shí)圖表就直接不顯示 ?用watch監(jiān)聽(tīng)props數(shù)據(jù)并在watch內(nèi)進(jìn)行賦值操作可解決該問(wèn)題 直接上代碼 父組件,vue3語(yǔ)法

    2024年02月15日
    瀏覽(36)
  • [Vue]全局事件總線

    [Vue]全局事件總線

    系列文章目錄: [Vue]目錄 老師的課件筆記,不含視頻 https://www.aliyundrive.com/s/B8sDe5u56BU 筆記在線版: https://note.youdao.com/s/5vP46EPC 視頻:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs從入門到精通 全局事件總線是一種組件間通信的方式,能夠?qū)崿F(xiàn)任意組件間的通信。 原理圖: 在全局事件總

    2023年04月10日
    瀏覽(28)
  • Vue全局事件總線

    Vue全局事件總線

    ?main.js Student.vue School.vue TodoList案例優(yōu)化: main.js App.vue: 刪除之前給Mylist綁定的:checkTodo? :deleteTodo MyList.vue :? 刪除props接收的checkTodo,deleteTodo,刪除給MyItem綁定的:checkTodo? :deleteTodo MyItem.vue :? 刪除props接收的checkTodo,deleteTodo ?

    2024年02月15日
    瀏覽(22)
  • 兩周掌握Vue3(三):全局組件、局部組件、Props

    兩周掌握Vue3(三):全局組件、局部組件、Props

    代碼倉(cāng)庫(kù):跳轉(zhuǎn) 本博客對(duì)應(yīng)分支:03 Vue 3 中的全局組件是在應(yīng)用程序中全局注冊(cè)的組件,可以在任何地方使用,而不需要在每個(gè)組件中都單獨(dú)注冊(cè)。 在components目錄下創(chuàng)建全局組件MyGlobalComponent.vue: 在App.vue中嘗試使用我們定義和注冊(cè)的全局組件: 效果: 在 Vue 3 中,局部組

    2024年01月18日
    瀏覽(23)
  • Github 用戶查詢案例【基于Vue2全局事件總線通信】

    Github 用戶查詢案例【基于Vue2全局事件總線通信】

    ? ? ? ? 本次案例是一個(gè)基于 Vue2 的全局事件總線通信的仿 Github 用戶搜索模塊,使用的接口是 Github 官方提供的搜索接口:?https://api.github.com/search/users?q=xxx(發(fā)送請(qǐng)求時(shí)需要將輸入的用戶名稱綁定替換掉xxx),如果對(duì)全局事件總線不太熟練的小伙伴可以看這篇文章: http:/

    2024年02月03日
    瀏覽(102)
  • vue3探索——組件通信之事件總線

    Vue2.x使用EventBus進(jìn)行組件通信,而Vue3.x推薦使用 mitt.js 。 比起Vue實(shí)例上的 EventBus , mitt.js 好在哪里呢?首先它足夠小,僅有200bytes,其次支持全部事件的監(jiān)聽(tīng)和批量移除,它還不依賴Vue實(shí)例,所以可以跨框架使用,React或者Vue,甚至jQuery項(xiàng)目都能使用同一套庫(kù)。 使用yarn安裝

    2024年02月12日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包