Vue组件传值的几种方式

最近在准备面试题,发现关于Vue使用方面问的最多的就是这个问题,但是网友们总结的总不是很全,因此在这里整理一下,也方便日后查阅。

一、父传子:prop

父组件:

<son :params='msg' />
import son from './son'
export default {
	data () {
		msg: '数据'
	},
	components: {
		son
	}
}

子组件:

props: {
	params: {
		type: String,
		default() {
			return ''
		}
	}
}

二、子传父:$emit

子组件:

<div @click='sonFunc' />
methods: {
	sonFunc() {
		this.$emit('change', 'sonData')
	}
}

父组件:

<son @change='changeFunc' />
methods: {
	changeFunc(e) {
		console.log(e) // sonData
	}
}

兄弟组件:eventBus ($emit, $on)

新建bus.js

import Vue form 'vue'
export default new Vue

父组件:

<div>
	<components-a />
	<components-b />
</div>

子组件a:

<template>
      <div>
           <button @click='abtn'>A按钮</button>
      </div>
</template>
<script>
import bus from './bus.js'
export default {
      name: 'components-a',
      data () {
        return {
                'msg': '我是组件A'
        }
      },
      methods: {
           abtn () {
                  let  _this = this;
                   //$emit这个方法会触发一个事件
                   bus.$emit('myFun', _this.msg)  
           }
      }
}
</script>

子组件b:

<template>
     <div>
         <div>{{btext}}</div>
     </div>
</template>
<script>
import bus from './bus.js'
export default {
   name: 'components-b',
   data () {
        return {
           'btext': '我是B组件内容'
        }
   },
   created () {
       bbtn () {
            bus.$on('myFun', (message) => {   
            //这里最好用箭头函数,不然this指向有问题
                 this.btext = message
            })
       }
   }
}
</script>

四、父组件更改子组件数据($refs.son.data)

父组件:

<template>
	<son ref='sons' />
</template>
methods: {
	changeFunc() {
		this.$refs.sons.sonsData = '改成父组件数据'
	}
}

子组件:

<div>{{ sonsData }}</div>
data () {
	sonsData: '我是子组件数据'
}

五、父子组件深传递数据(provide和inject)(待)

六、vuex(待)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值