在Vue中,組件之間有時(shí)需要傳遞數(shù)據(jù),實(shí)現(xiàn)組件間的交互。Vue提供了多種傳遞數(shù)據(jù)的方式,常用的包括Props、Events和Vuex等。
Props是子組件從父組件中接收參數(shù)的一種方式。父組件通過在子組件上使用屬性綁定的方式將數(shù)據(jù)傳遞給子組件。子組件通過props選項(xiàng)來聲明需要接收的參數(shù)。接收到的參數(shù)存儲(chǔ)在組件實(shí)例的props屬性中。
// 父組件
<template>
<Child :message="msg" />
</template>
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
data() {
return {
msg: 'Hello World'
};
}
};
</script>
// 子組件
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
props: {
message: String
}
};
</script>
Events是子組件向父組件通信的一種方式。子組件通過$emit方法觸發(fā)自定義事件,并傳遞需要傳遞的數(shù)據(jù)。父組件通過在子組件上使用v-on指令監(jiān)聽自定義事件,并在相應(yīng)的回調(diào)函數(shù)中處理接收到的數(shù)據(jù)。
// 子組件
<template>
<button @click="onClick">Click me</button>
</template>
<script>
export default {
methods: {
onClick() {
this.$emit('submit', { value: 'Hello World' });
}
}
};
</script>
// 父組件
<template>
<Child @submit="onSubmit" />
</template>
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
methods: {
onSubmit(data) {
console.log(data); // { value: 'Hello World' }
}
}
};
</script>
Vuex是Vue的官方狀態(tài)管理庫,用于管理全局狀態(tài)。在Vuex中,數(shù)據(jù)存儲(chǔ)在一個(gè)中央數(shù)據(jù)倉(cāng)庫中,稱為store。組件可以通過Vuex提供的API來修改store中的數(shù)據(jù)。組件間能夠共享store中的數(shù)據(jù),實(shí)現(xiàn)狀態(tài)共享。
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
}
});
// 子組件
<template>
<button @click="onClick">Click me</button>
</template>
<script>
export default {
methods: {
onClick() {
this.$store.commit('increment');
}
}
};
</script>
// 父組件
<template>
<Child />
</template>
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
computed: {
count() {
return this.$store.state.count;
}
}
};
</script>
在Vue中,傳遞數(shù)據(jù)的方式多種多樣,需要根據(jù)具體場(chǎng)景選擇合適的方式。
上一篇vue為什么路由
下一篇dom如何讀取json