1.父子組件
- Props:通過在父組件中定義props屬性,将數據傳遞給子組件。子組件通過props屬性接收數據。例如:
// 父組件
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data() {
return {
hello: 'Hello World!'
}
}
}
// 子組件
{{ message }}
export default {
props: {
message: String
}
}
- $emit:通過在子組件中觸發事件,将數據傳遞給父組件。父組件通過在子組件上監聽事件,接收數據。例如:
// 子組件
Send Message
export default {
methods: {
sendMessage() {
this.$emit('message-sent', 'Hello World!')
}
}
}
// 父組件
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
methods: {
handleMessage(message) {
console.log(message) // 'Hello World!'
}
}
}
- Provide/Inject:通過在父組件中提供數據,讓子孫組件可以注入數據。例如:
// 父組件
import ProvideMessage from './ProvideMessage.vue'
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ProvideMessage,
ChildComponent
},
data() {
return {
hello: 'Hello World!'
}
}
}
// ProvideMessage組件
export default {
provide() {
return {
message: this.message
}
},
props: {
message: String
}
}
// 子組件
{{ message }}
export default {
inject: ['message']
}
以上是Vue中組件傳參的三種常用方法,分别是Props、$emit和Provide/Inject。通過這些方法,我們可以在組件之間傳遞數據,實現組件之間的通信。

2.兄弟組件
- 通過共同的父組件傳遞數據:如果兩個兄弟組件有共同的父組件,可以通過在父組件中定義數據,然後通過props屬性分别傳遞給兩個兄弟組件。例如:
// 父組件
import ChildComponent1 from './ChildComponent1.vue'
import ChildComponent2 from './ChildComponent2.vue'
export default {
components: {
ChildComponent1,
ChildComponent2
},
data() {
return {
hello: 'Hello',
world: 'World'
}
}
}
// ChildComponent1組件
{{ message }}!
export default {
props: {
message: String
}
}
// ChildComponent2組件
{{ message }}!
export default {
props: {
message: String
}
}
- 通過事件總線傳遞數據:可以在Vue實例中創建一個事件總線,然後在兄弟組件中分别觸發和監聽事件,從而實現數據傳遞。例如:
// Vue實例
export default {
data() {
return {
message: ''
}
},
created() {
this.$on('message-sent', (message) => {
this.message = message
})
}
}
// ChildComponent1組件
Send Message
export default {
methods: {
sendMessage() {
this.$root.$emit('message-sent', 'Hello')
}
}
}
// ChildComponent2組件
{{ message }} World!
export default {
computed: {
message() {
return this.$root.message
}
}
}
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
message: ''
},
mutations: {
setMessage(state, message) {
state.message = message
}
}
})
// ChildComponent1組件
Send Message
export default {
methods: {
sendMessage() {
this.$store.commit('setMessage', 'Hello')
}
}
}
// ChildComponent2組件
{{ message }} World!
export default {
computed: {
message() {
return this.$store.state.message
}
}
}
以上是Vue中兄弟組件傳參的三種常用方法,分别是通過共同的父組件傳遞數據、通過事件總線傳遞數據和通過Vuex狀态管理傳遞數據。根據具體的場景和需求,選擇合适的方法來實現兄弟組件之間的數據傳遞。
3.祖先後代
- 通過props和 e m i t 傳遞數據:祖先組件可以通過 p r o p s 屬性将數據傳遞給中間組件,中間組件再通過 p r o p s 屬性将數據傳遞給後代組件。後代組件可以通過 emit傳遞數據:祖先組件可以通過props屬性将數據傳遞給中間組件,中間組件再通過props屬性将數據傳遞給後代組件。後代組件可以通過 emit傳遞數據:祖先組件可以通過props屬性将數據傳遞給中間組件,中間組件再通過props屬性将數據傳遞給後代組件。後代組件可以通過emit事件将數據傳遞回祖先組件。例如:
// 祖先組件
import MiddleComponent from './MiddleComponent.vue'
export default {
components: {
MiddleComponent
},
data() {
return {
hello: 'Hello'
}
}
}
// 中間組件
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
props: {
message: String
},
methods: {
sendMessage(message) {
this.$emit('message-sent', message)
}
}
}
// 後代組件
{{ message }} World!
export default {
props: {
message: String
}
}
- 通過provide和inject傳遞數據:祖先組件可以通過provide方法提供數據,後代組件可以通過inject方法注入數據。例如:
// 祖先組件
import MiddleComponent from './MiddleComponent.vue'
export default {
components: {
MiddleComponent
},
provide() {
return {
message: 'Hello'
}
}
}
// 中間組件
// 後代組件
{{ message }} World!
export default {
inject: ['message']
}
- 通過Vuex狀态管理傳遞數據:祖先組件和後代組件都可以通過Vuex來管理應用程序的狀态,從而實現數據傳遞。例如:
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
message: 'Hello'
},
mutations: {
setMessage(state, message) {
state.message = message
}
}
})
// 祖先組件
import MiddleComponent from './MiddleComponent.vue'
export default {
components: {
MiddleComponent
}
}
// 中間組件
// 後代組件
{{ message }} World!
export default {
computed: {
message() {
return this.$store.state.message
}
}
}
以上是Vue中祖先組件和後代組件傳遞數據的三種常用方法,分别是通過props和$emit傳遞數據、通過provide和inject傳遞數據和通過Vuex狀态管理傳遞數據。根據具體的場景和需求,選擇合适的方法來實現祖先組件和後代組件之間的數據傳遞。

4.參數傳遞和插槽之間的聯系
在Vue中,傳參和插槽是兩個不同的概念,但它們之間有一定的關系。
傳參是指在組件之間傳遞數據,可以通過props和$emit、provide和inject、Vuex等方式實現。傳參的目的是讓組件之間可以共享數據,從而實現組件之間的通信。
插槽是指在組件中定義一個或多個插槽,然後在使用該組件時,可以在插槽中插入任意内容。插槽的目的是讓組件更加靈活,可以根據使用場景動态地插入不同的内容。
傳參和插槽之間的關系在于,傳參可以用來控制插槽中的内容。例如,可以通過props屬性将數據傳遞給子組件,在子組件中使用插槽來展示這些數據。又例如,可以通過$emit事件将子組件中的數據傳遞給父組件,在父組件中使用插槽來展示這些數據。
下面是一個示例,演示了如何通過傳參和插槽來控制組件中的内容:
// 父組件
{{ message }} World!
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data() {
return {
hello: 'Hello'
}
}
}
// 子組件
export default {
props: {
message: String
},
data() {
return {
message: this.message
}
}
}
在上面的示例中,父組件通過props屬性将數據傳遞給子組件,子組件通過插槽将數據傳遞給父組件。具體來說,父組件将數據hello傳遞給子組件,子組件将數據message傳遞給插槽,父組件通過插槽接收數據并展示在頁面上。
總之,傳參和插槽是兩個不同的概念,但它們之間有一定的關系。傳參可以用來控制插槽中的内容,從而實現組件之間的通信和動态渲染。