淺談Vue的組件間傳值(包括Vuex)
在不使用Vuex的情況下,組件間傳值的方式是通過父?jìng)髯拥姆绞交蛘咝值芙M件傳值。
父?jìng)髯?
fatherComponent:
<template>
<div>
<HELLOWORLD :needData="content"></HELLOWORLD>
</div>
</template>
<script>
import HELLOWORLD from '../components/HelloWorld.vue'
export default {
components:{
HELLOWORLD
},
data(){
return{
content:"content"
}
}
}
</script>
<style lang="less" scoped>
</style>
SonComponent(子組件名稱為HELLOWORLD):
<template>
<div>
<h1>HELLOWORLD</h1>
</div>
</template>
<script>
export default {
props:["needData"],
data(){
return{
H:this.needData,
}
},
mounted(){
console.log(this.H);
}
}
</script>
<style lang="less" scoped>
</style>

子傳父:
FatherComponent:
<template>
<div>
<HELLOWORLD @sendData="getData"></HELLOWORLD>
</div>
</template>
<script>
import HELLOWORLD from '../components/HelloWorld.vue'
export default {
components:{
HELLOWORLD
},
data(){
return{
}
},
methods:{
getData(sonData){
console.log("data=>",sonData);
},
}
}
</script>
<style lang="less" scoped>
</style>
SonComponent:
<template>
<div>
<h1>HELLOWORLD</h1>
</div>
</template>
<script>
export default {
data(){
return{
content:"content"
}
},
mounted(){
this.$emit("sendData",this.content);
}
}
</script>
<style lang="less" scoped>
</style>
效果圖:

實(shí)際上,為了數(shù)據(jù)能在父子組件間傳值;還可以通過調(diào)用父組件的函數(shù)或調(diào)用子組件的函數(shù)的方式實(shí)現(xiàn)傳值。 Vue中子組件調(diào)用父組件的函數(shù)
http://www.dhdzp.com/article/134732.htm
Vue父組件調(diào)用子組件的函數(shù)
http://www.dhdzp.com/article/219793.htm
Vuex是Vue框架中不可或缺的一部分;
Vuex在需要多組件通信的時(shí)候顯得格外重要;比如數(shù)據(jù)在父組件形成,但數(shù)據(jù)需要在子組件的子組件中使用時(shí),就可以使用Vuex管理;或者說需要兄弟組件傳值時(shí),可以使用Vuex。
在Vue的store.js中有五個(gè)屬性:
分別是state,mutations,actions,getters,modules
結(jié)構(gòu)為:
let a={
state: {
name:"moduleA"
},
//mutations專門用于改變state屬性中的數(shù)據(jù)
mutations: {
setFun(state,item){
state.name=item;
}
}
}
export default new Vuex.Store({
//state專門存放數(shù)據(jù)
state: {
num:100,
useAcomponent:{
name:"A",
},
useBcomponent:"content",
},
//mutations專門用于改變state屬性中的數(shù)據(jù)
mutations: {
setStateFun(state,item){
state.useBcomponent="Bcomponent";
}
},
actions: {
httpGetData(store,item){
setTimeout(()=>{
console.log(item);
store.commit("setStateFun",item);
},3000)
}
},
getters:{
//調(diào)用getters中的函數(shù)時(shí)沒有入?yún)?
getterFun1(state){
return state.num++
}
//調(diào)用getters中的函數(shù)時(shí)有入?yún)?
gettterFun2(state){
return function(val){
return state.num+=val;
}
}
},
modules: {
ModuleA:a
}
});
}
state中的數(shù)據(jù)可以在不同組件中訪問獲取。
獲取state的數(shù)據(jù):
this.$store.state.state對(duì)象中的數(shù)據(jù); 例如 let val=this.$store.state.num;
更改state數(shù)據(jù),就是調(diào)用Vuex的mutations對(duì)象中的函數(shù):
this.$store.commit("函數(shù)名","數(shù)據(jù)");
例如
this.$store.commit("setStateFun","testSetItem");
actions對(duì)象,用于在Vuex中發(fā)請(qǐng)求
this.$store.dispatch("函數(shù)名","數(shù)據(jù)");
例如
this.$store.dispatch("httpGetData","testItem");
getters對(duì)象,類似Vue的計(jì)算屬性
this.$store.getters.函數(shù)名; 例如 //沒入?yún)r(shí) this.$store.getters.getterFun1; //有入?yún)r(shí) this.$store.getters.getterFun2(123);
modules對(duì)象,類似將需要使用的store模塊化分開,每個(gè)modules對(duì)象對(duì)應(yīng)一個(gè)模塊
//獲取modules對(duì)象中的state數(shù)據(jù)
this.$store.state.modules對(duì)象名.state值;
例如
this.$store.state.ModuleA.name
//使用modules對(duì)象中的mutations的函數(shù)
this.$store.commit("函數(shù)名","入?yún)?shù)據(jù)");
例如
this.$store.commit("setFun","itemabc");
//這里需要注意,如果modules模塊中與外部(不是modules對(duì)象模塊)的mutations對(duì)象中有相同名字的函數(shù)時(shí),則相同名字的函調(diào)用時(shí)都會(huì)執(zhí)行
到此這篇關(guān)于淺談Vue的組件間傳值(包括Vuex)的文章就介紹到這了,更多相關(guān)Vue 組件間傳值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目部署到Apache服務(wù)器中遇到的問題解決
這篇文章主要介紹了vue項(xiàng)目部署到Apache中遇到的問題解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
vuex通過getters訪問數(shù)據(jù)為undefined問題及解決
這篇文章主要介紹了vuex通過getters訪問數(shù)據(jù)為undefined問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Vue2+element-ui實(shí)現(xiàn)面包屑導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了Vue2+element-ui使用面包屑導(dǎo)航的正確姿勢(shì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
vue中watch監(jiān)聽對(duì)象中某個(gè)屬性的方法
watch 的用法有個(gè)特點(diǎn),就是當(dāng)值第一次綁定的時(shí)候,不會(huì)執(zhí)行監(jiān)聽函數(shù),只有值發(fā)生改變才會(huì)執(zhí)行,如果我們需要在最初綁定值得時(shí)候也執(zhí)行函數(shù),就需要用到 immediate 屬性,這篇文章主要介紹了vue中watch監(jiān)聽對(duì)象中某個(gè)屬性的方法,需要的朋友可以參考下2023-04-04
VUE腳手架框架編寫簡(jiǎn)潔的登錄界面的實(shí)現(xiàn)
本文主要介紹了VUE腳手架框架編寫簡(jiǎn)潔的登錄界面的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
vue項(xiàng)目設(shè)置活性字體過程(自適應(yīng)字體大小)
這篇文章主要介紹了vue項(xiàng)目設(shè)置活性字體過程(自適應(yīng)字體大小),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
解決vue 更改計(jì)算屬性后select選中值不更改的問題
下面小編就為大家分享一篇解決vue 更改計(jì)算屬性后select選中值不更改的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03

