浅谈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 组件间传值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)

    Vue2.0 传值方式: 在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来.这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况.当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍.我先给大家介绍Vue开发中常用的三种传值方式. Vue常用的三种传值方式有: •父传子 •子传父 •非父子传值 引

  • Vue.js中兄弟组件之间互相传值实例

    兄弟组件之间互相传值,需要建立一个"中转站"(新的vue实例),并且需要主动触发. 实例上的$on方法来接受监听. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>组件传值</title> <script src="vue.js"></script

  • 深入理解Vue 组件之间传值

    一.父组件向子组件传递数据 在 Vue 中,可以使用props向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从父组件获取 logo 的值,就需要使用props: ['logo'] 在 props 中添加了元素之后,就不需要在 data 中再添加变量了 父组件部分: 在调用组件的时候,使用 v-bind 将 logo 的值绑定为 App.vue 中定义的变量 logoMsg 然后就能将App.vue中 logoM

  • vue2.0 子组件改变props值,并向父组件传值的方法

    为什么我们会有修改 prop 中数据的冲动呢?通常是这两种原因: prop 作为初始值传入后,子组件想把它当作局部数据来用: prop 作为初始值传入,由子组件处理成其它数据输出. 对这两种原因,正确的应对方式是: 定义一个局部变量,并用 prop 的值初始化它: props: ['initialCounter'], data: function () { return { counter: this.initialCounter } } 定义一个计算属性,处理 prop 的值并返回. prop

  • vue父组件向子组件动态传值的两种方法

    在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片 方法有两种, 方法一: props传值,这里注意一个问题,传过来的值需要用watch监听并赋值,否则这里获取到的是空数组   父组件: <uploadImg :width="200" :height="200" name="productImage" size=&qu

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

    目录 父传子: 子传父: 在不使用Vuex的情况下,组件间传值的方式是通过父传子的方式或者兄弟组件传值. 父传子: fatherComponent: <template> <div> <HELLOWORLD :needData="content"></HELLOWORLD> </div> </template> <script> import HELLOWORLD from '../components

  • 浅谈vue父子组件怎么传值

    背景:最近在做vue的项目,因为页面的逻辑比较复杂,代码量较多,所以就想抽离出一些组件放到component里面.问题就随之来了. 因为vue不提倡在子组件中修改父组件的值,所以如果要这样操作的话就要麻烦一步,而我正好需要这样的操作,于是就查阅了资料 上父组件的代码,引用了exp-group子组件 <exp-group :grpVisible="grpVisible" :grpData="grpData" @updateData="acceptDat

  • 浅谈Vue父子组件和非父子组件传值问题

    本文介绍了浅谈Vue父子组件和非父子组件传值问题,分享给大家,具体如下: 1.如何创建组件 1.新建一个组件,如:在goods文件夹下新建goodsList.vue <template> <div class='tmpl'> goodsList组件 </div> </template> <style> </style> <script> export default { data() { return{} }, creat

  • 浅谈vue中子组件传值的默认值情况

    当父组件中的content值没有传入时,子组件利用default属性设置默认值,此情况时,页面会显示default value. 当传入content的值时,default属性的默认值不生效,界面显示为: 补充知识:Vue父组件向子组件传值遇到的BUG 当子组件中含有props属性,使用ref对其中的prop属性赋值时报错 Avoid mutating a prop directly since the value will be overwritten whenever the parent

  • 浅谈vue单一组件下动态修改数据时的全部重渲染

    今天在学习vue的过程中,发现一个有趣的现象. 在某一组件下的某一数据通过点击事件被动态修改的时候,对应view中的数据同步的进行了修改,没错,这不是废话吗,vue的一大特色就是数据的双向绑定.可有趣的是,该组件下我写的另一个用Math.random()的data值对应的值和视图也发生了变化 这就让我这个刚入门的小白有点奇怪了,我修改一个,怎么变了两个????脑洞放开一想,会不会数据在双向同步的时候,发生了什么,比如.是不是只要有一个节点变了,node都重新进行了加载??? 我想这其中的缘由必定

  • 浅谈vue中组件绑定事件时是否加.native

    组件绑定事件时 1. 普通组件绑定事件不能添加.native, 添加后事件失效 2. 自定义组件绑定事件需要添加.native, 否则事件无效 <template> <!-- <mt-field label="用户名" placeholder="请输入用户名"></mt-field> --> <input type="text" @keyup.native="show($event)

  • 浅谈Vue 函数式组件的使用技巧

    什么是函数式组件 没有管理任何状态,也没有监听任何传递给它的状态,也没有生命周期方法,它只是一个接受一些 prop 的函数.简单来说是 一个无状态和无实例的组件 基本写法: Vue.component('my-component', { functional: true, // Props 是可选的 props: { // ... }, // 为了弥补缺少的实例 // 提供第二个参数作为上下文 render: function(createElement, context) { // ... }

  • 浅谈Vue.js 组件中的v-on绑定自定义事件理解

    每个 Vue 实例都实现了事件接口(Events interface),即: 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件 Vue的事件系统分离自浏览器的EventTarget API.尽管它们的运行类似,但是$on 和 $emit 不是addEventListener 和 dispatchEvent 的别名. 另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件. 下面是一个文档上面的例子: 2017年4月11日更新 <d

  • 浅谈React中组件间抽象

    关于今天要学习的组件间抽象其实我这小白看了几次还没弄明白,这次决定一探究竟.在组件构建中,通常有一类功能需要被不同的组件公用,此时就涉及抽象的概念,在React中我们主要了解mixin和高阶组件. mixin mixin的特性广泛存在于各个面向对象语言中,在ruby中,include关键词就是mixin,是将一个模块混入到另外一个模块中,或者是类中. 封装mixin方法 const mixin = function(obj, mixins) { const newObj = obj newObj

  • 浅谈Vue.js组件(二)

    插槽(Slot) 定义一个名child子组件,为该子组件添加内容应该在子组件的template中定义,直接在父组件的<child>标签中定义的内容不会被渲染. 在子组件中通过加入<slot>元素占位,便能够渲染父组件中子组件标签中的内容了. 插槽内容 任何模版代码 HTML代码 其他组件 插槽可以有默认内容,当在父组件中没有提供内容的时候,来进行显示. <!-- submit-button --> <button type="submit"&g

随机推荐