淺談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.dbjr.com.cn/article/134732.htm
Vue父組件調(diào)用子組件的函數(shù)
http://www.dbjr.com.cn/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)文章
關(guān)于vue中的時(shí)間格式轉(zhuǎn)化問題
這篇文章主要介紹了關(guān)于vue中的時(shí)間格式轉(zhuǎn)化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07利用vue.js實(shí)現(xiàn)被選中狀態(tài)的改變方法
下面小編就為大家分享一篇利用vue.js實(shí)現(xiàn)被選中狀態(tài)的改變方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02Vue中ref、reactive、toRef、toRefs、$refs的基本用法總結(jié)
這篇文章主要給大家介紹了關(guān)于Vue中ref、reactive、toRef、toRefs、$refs的基本用法,以及他們之家的區(qū)別,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11解決vue 綁定對(duì)象內(nèi)點(diǎn)擊事件失效問題
今天小編就為大家分享一篇解決vue 綁定對(duì)象內(nèi)點(diǎn)擊事件失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09