淺談Vue的組件間傳值(包括Vuex)
在不使用Vuex的情況下,組件間傳值的方式是通過父傳子的方式或者兄弟組件傳值。
父傳子:
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ù)據(jù)能在父子組件間傳值;還可以通過調(diào)用父組件的函數(shù)或調(diào)用子組件的函數(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ù)據(jù)在父組件形成,但數(shù)據(jù)需要在子組件的子組件中使用時,就可以使用Vuex管理;或者說需要兄弟組件傳值時,可以使用Vuex。
在Vue的store.js中有五個屬性:
分別是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ù)時沒有入?yún)? getterFun1(state){ return state.num++ } //調(diào)用getters中的函數(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對象中的數(shù)據(jù); 例如 let val=this.$store.state.num;
更改state數(shù)據(jù),就是調(diào)用Vuex的mutations對象中的函數(shù):
this.$store.commit("函數(shù)名","數(shù)據(jù)"); 例如 this.$store.commit("setStateFun","testSetItem");
actions對象,用于在Vuex中發(fā)請求
this.$store.dispatch("函數(shù)名","數(shù)據(jù)"); 例如 this.$store.dispatch("httpGetData","testItem");
getters對象,類似Vue的計算屬性
this.$store.getters.函數(shù)名; 例如 //沒入?yún)r this.$store.getters.getterFun1; //有入?yún)r this.$store.getters.getterFun2(123);
modules對象,類似將需要使用的store模塊化分開,每個modules對象對應(yīng)一個模塊
//獲取modules對象中的state數(shù)據(jù) this.$store.state.modules對象名.state值; 例如 this.$store.state.ModuleA.name //使用modules對象中的mutations的函數(shù) this.$store.commit("函數(shù)名","入?yún)?shù)據(jù)"); 例如 this.$store.commit("setFun","itemabc"); //這里需要注意,如果modules模塊中與外部(不是modules對象模塊)的mutations對象中有相同名字的函數(shù)時,則相同名字的函調(diào)用時都會執(zhí)行
到此這篇關(guān)于淺談Vue的組件間傳值(包括Vuex)的文章就介紹到這了,更多相關(guān)Vue 組件間傳值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用vue.js實現(xiàn)被選中狀態(tài)的改變方法
下面小編就為大家分享一篇利用vue.js實現(xiàn)被選中狀態(tài)的改變方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02Vue中ref、reactive、toRef、toRefs、$refs的基本用法總結(jié)
這篇文章主要給大家介紹了關(guān)于Vue中ref、reactive、toRef、toRefs、$refs的基本用法,以及他們之家的區(qū)別,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11