最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

vue組件中的數(shù)據(jù)傳遞方法

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:14:53
文檔

vue組件中的數(shù)據(jù)傳遞方法

vue組件中的數(shù)據(jù)傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。必須使用特定的方法才能實現(xiàn)組件之間的數(shù)據(jù)傳遞。組件之間傳遞數(shù)據(jù)大致分為三種情況: 父組件向子組件傳遞數(shù)據(jù),通過 props 傳遞數(shù)據(jù)。 子組件向父組件傳遞數(shù)據(jù),通過 event
推薦度:
導讀vue組件中的數(shù)據(jù)傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。必須使用特定的方法才能實現(xiàn)組件之間的數(shù)據(jù)傳遞。組件之間傳遞數(shù)據(jù)大致分為三種情況: 父組件向子組件傳遞數(shù)據(jù),通過 props 傳遞數(shù)據(jù)。 子組件向父組件傳遞數(shù)據(jù),通過 event

一、父組件向子組件傳遞數(shù)據(jù)

子組件部分:

<template>
 <div class="child">
 {{ msg }}
 </div>
</template>
<script>
export default {
 name: 'child',
 data(){
 return {
 
 }
 },
 props: ['msg']
</script>

在child.vue中,msg實在data中定義的變量,使用props:['msg']從父組件中獲取msg的值

父組件部分:

<template>
 <div class="child">
 child
 <child :msg="message"></child>
 </div>
</template>
<script>
import child from './child.vue'
export default {
 name: 'parent',
 components: { child },
 data () {
 return {
 message: 'hello vue'
 }
 }
}
</script>

在調(diào)用組件的時候,使用v-bind將msg的值綁定為parent.vue中定義的變量message,這樣就能將parent.vue中的message的值傳給child.vue了。

單項數(shù)據(jù)流

當父組件的 message 發(fā)生改變,子組件也會自動地更新視圖。但是在子組件中,我們不要去修改 prop。如果你必須要修改到這些數(shù)據(jù),你可以使用以下方法:

方法一:把 prop 賦值給一個局部變量,然后需要修改的話就修改這個局部變量,而不影響 prop

export default {
 data(){
 return {
 newMessage: null
 } 
 },
 props: ['message'],
 created(){
 this.newMessage = this.message;
 }
}

方法二:在計算屬性中對 prop 進行處理

export default {
 props: ['message'],
 computed: {
 newMessage(){
 return this.message + ' 哈哈哈';
 }
 }
}

二、子組件向父組件傳遞數(shù)據(jù)

子組件主要通過實踐傳遞數(shù)據(jù)給父組件的

子組件部分:

<template>
 <div class="child">
 <span>用戶名:</span>
 <input v-model="username" @change="sendUser" />
 </div>
</template>

子組件的html中,當input中的值發(fā)生改變時,將username傳遞給parent.vue。

首先聲明了一個sendUser方法,用change事件來調(diào)用sendUser。

<script>
 export default {
 name: 'parend',
 data () {
 return {
 username: ''
 }
 },
 methods: {
 sendUser () {
 this.$emit('changeName', this.username)
 }
 }
}
</script>

在sendUser中,使用$emit來遍歷changeName事件,并返回this.name,其中changeName是一個自定義的事件,功能類似于一個中轉(zhuǎn),this.name將通過這個事件傳遞給父組件。

父組件部分:

<template>
 <div class="parent">
 <child @changeName="getUser"></child>
 <p>用戶名:{{user}}</p>
 </div>
</template>

在父組件中聲明了一個getUser方法,用changeName事件調(diào)用getUser方法,獲取從子組件傳遞過來的參數(shù)username

<script>
import child from './child.vue'
export default {
 name: 'parent',
 components: { child },
 data () {
 return {
 user: ''
 }
 },
 methods: {
 getUser(data) {
 this.user = data
 }
 }
}
</script>

getUser方法中的參數(shù)msg就是從子組件中傳遞過來的參數(shù)uesrname。

三、同級組件間的數(shù)據(jù)傳遞

有時候兩個組件也需要通信(非父子關(guān)系)。當然Vue2.0提供了Vuex,但在簡單的場景下,可以使用一個空的Vue實例作為中央事件總線。

<template>
 <div id="app">
 <c1></c1> //組件1
 <c2></c2> //組件2
 </div>
</template>

組件c1中:

<template>
 <div class="c1">
 page
 <button @click="changeMsg">click</button>
 </div>
</template>
<script>
var Bus = new Vue(); //為了方便將Bus(空vue)定義在一個組件中,在實際的運用中一般會新建一Bus.js
export default {
 name: 'c1',
 data () {
 return {
 message: 'hi'
 }
 },
 methods: {
 changeMsg () { //點擊按鈕,將this.message傳遞給c2
 bus.$emit('sendMsg', this.message)
 }
 }
}
</script>

組件c2中:

<template>
 <div class="c2">
 {{msg}}
 </div>
</template>

<script>
var Bus = new Vue();

export default {
 name: 'c2',
 data () {
 return {
 msg: ''
 }
 },
 created () {
 bus.$on('sendMsg',(data)=>{ //data即為c1組件中的message
 this.msg = data
 })
 }
}
</script>

在實際運用中,一般將bus抽離出來:

//Bus.js
import Vue from 'vue'
const Bus = new Vue()
expore default Bus

組件調(diào)用時引用(import Bus from './Bus.js')

但這種引入方式,經(jīng)過webpack打包后可能會出現(xiàn)Bus局部作用域的情況,即引用的是兩個不同的Bus,導致不能正常通信
實際運用:

將Bus注入到Vue根對象中

import Vue from 'vue'
const Bus = new Vue()
var app= new Vue({
 el:'#app',
   data:{
    Bus
 }  
})

在子組件中通過this.$root.Bus.$on(),this.$root.Bus.$emit()來調(diào)用

總結(jié)

以上所述是小編給大家介紹的vue組件中的數(shù)據(jù)傳遞方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue組件中的數(shù)據(jù)傳遞方法

vue組件中的數(shù)據(jù)傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。必須使用特定的方法才能實現(xiàn)組件之間的數(shù)據(jù)傳遞。組件之間傳遞數(shù)據(jù)大致分為三種情況: 父組件向子組件傳遞數(shù)據(jù),通過 props 傳遞數(shù)據(jù)。 子組件向父組件傳遞數(shù)據(jù),通過 event
推薦度:
標簽: 方法 VUE 方式
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top