浅谈Vue的组件间传值(包括Vuex)

 更新时间:2021年08月16日 17:33:06   作者:RisingSun  
这篇文章主要介绍了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>

效果图:

在这里插入图片描述

实际上,为了数据能在父子组件间传值;还可以通过调用父组件的函数或调用子组件的函数的方式实现传值。 Vue中子组件调用父组件的函数

https://www.jb51.net/article/134732.htm

Vue父组件调用子组件的函数

https://www.jb51.net/article/219793.htm

Vuex是Vue框架中不可或缺的一部分;

Vuex在需要多组件通信的时候显得格外重要;比如数据在父组件形成,但数据需要在子组件的子组件中使用时,就可以使用Vuex管理;或者说需要兄弟组件传值时,可以使用Vuex。

在Vue的store.js中有五个属性:
分别是state,mutations,actions,getters,modules

结构为:

let a={
  state: {
  	name:"moduleA"
  },
  //mutations专门用于改变state属性中的数据
  mutations: {
  	setFun(state,item){
		state.name=item;
	}
  }
}

export default new Vuex.Store({
  //state专门存放数据
  state: {
  	num:100,
  	useAcomponent:{
		name:"A",
	},
	useBcomponent:"content",
  },
  //mutations专门用于改变state属性中的数据
  mutations: {
  	setStateFun(state,item){
		state.useBcomponent="Bcomponent";
	}
  },
  actions: {
  	httpGetData(store,item){
		setTimeout(()=>{
			console.log(item);
			store.commit("setStateFun",item);
		},3000)
	}
  },
  getters:{
  //调用getters中的函数时没有入参
	getterFun1(state){
		return state.num++
	}
  //调用getters中的函数时有入参
  	gettterFun2(state){
		return function(val){
			return state.num+=val;
		}
	}
  },
  modules: {
  	ModuleA:a
  }
});
}

state中的数据可以在不同组件中访问获取。

获取state的数据:

this.$store.state.state对象中的数据;
例如
let val=this.$store.state.num;

更改state数据,就是调用Vuex的mutations对象中的函数:

this.$store.commit("函数名","数据");
例如
this.$store.commit("setStateFun","testSetItem");

actions对象,用于在Vuex中发请求

this.$store.dispatch("函数名","数据");
例如
this.$store.dispatch("httpGetData","testItem");

getters对象,类似Vue的计算属性

this.$store.getters.函数名;
例如
//没入参时
this.$store.getters.getterFun1;
//有入参时
this.$store.getters.getterFun2(123);

modules对象,类似将需要使用的store模块化分开,每个modules对象对应一个模块

//获取modules对象中的state数据
this.$store.state.modules对象名.state值;
例如
this.$store.state.ModuleA.name
//使用modules对象中的mutations的函数
this.$store.commit("函数名","入参数据");
例如
this.$store.commit("setFun","itemabc");
//这里需要注意,如果modules模块中与外部(不是modules对象模块)的mutations对象中有相同名字的函数时,则相同名字的函调用时都会执行

到此这篇关于浅谈Vue的组件间传值(包括Vuex)的文章就介绍到这了,更多相关Vue 组件间传值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue遮罩层如何阻止滚动

    vue遮罩层如何阻止滚动

    这篇文章主要介绍了vue遮罩层如何阻止滚动,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue购物车插件编写代码

    vue购物车插件编写代码

    这篇文章主要为大家详细介绍了vue购物车插件的编写代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 使用Axios拦截器中止Vue请求的步骤详解

    使用Axios拦截器中止Vue请求的步骤详解

    假设 App 的用户可以在短时间内进行多个 API 调用,但您只想显示上次调用的结果,之前正在进行的请求变得无关紧要,在这种情况下,您可以利用 Axios 拦截器,本文给大家介绍了如何使用Axios拦截器中止Vue请求,需要的朋友可以参考下
    2023-11-11
  • vue select change事件如何传递自定义参数

    vue select change事件如何传递自定义参数

    这篇文章主要介绍了vue select change事件如何传递自定义参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue axios post发送复杂对象问题

    vue axios post发送复杂对象问题

    现在vue项目中,一般使用axios发送请求去后台拉取数据。这篇文章主要介绍了vue axios post发送复杂对象的一点思考,需要的朋友可以参考下
    2019-06-06
  • vue中内网/局域网/离线的情况下使用及建立项目方式

    vue中内网/局域网/离线的情况下使用及建立项目方式

    这篇文章主要介绍了vue中内网/局域网/离线的情况下使用及建立项目方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue 组件的封装之基于axios的ajax请求方法

    vue 组件的封装之基于axios的ajax请求方法

    今天小编就为大家分享一篇vue 组件的封装之基于axios的ajax请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Vue利用openlayers实现点击弹窗的方法详解

    Vue利用openlayers实现点击弹窗的方法详解

    点击弹窗其实就是添加一个弹窗图层,然后在点击的时候让他显示出来罢了。本文将利用openlayers实现这一效果,快跟随小编一起学习一下吧
    2022-06-06
  • vue.config.js使用代理配置真实请求url方式

    vue.config.js使用代理配置真实请求url方式

    这篇文章主要介绍了vue.config.js使用代理配置真实请求url方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue3+Element Plus实现自定义穿梭框的详细代码

    vue3+Element Plus实现自定义穿梭框的详细代码

    找到一个好用的vue树形穿梭框组件都很难,又不想仅仅因为一个穿梭框在element-ui之外其他重量级插件,本文给大家分享vue3+Element Plus实现自定义穿梭框的示例代码,感兴趣的朋友一起看看吧
    2024-01-01

最新评论