vue父子组件,兄弟组件传值以及ref的作用

1.父组件给子组件传值:

父组件(v-bind传值)

<div :msg="msg"></div>

子组件(default是为了避免父组件没有传值的情况)

export default{props:{msg:{type:String,default:'hello world'}}}

2.子组件给父组件传值:

this.$emit('方法名称', this.message);

3.兄弟组件传值:

1、兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据

2、创建一个Vue的实例,让各个兄弟共用同一个事件机制。

3、传递数据方,通过一个事件触发bus. bus.$emit('方法名称','传递的值')

4.接受数据放bus.$on(方法名,function(接收数据的参数){用该组件的数据接收传递过来的数据}),此时函数中的this已经发生了改变,可以使用箭头函数。

1.创建一个单独的bus.js

import Vue from 'vue' 

export default new Vue

2.兄弟组件分别引入bus.js :import bus from '../../js/event.js'

3.传递数据的组件: bus.$emit('myFun','传递的值')

4.接收数据的组件:bus.$on('myFun',(message)=>{//这里最好用箭头函数,不然this指向有问题 

 this.msg = message})

4.顺便说下ref吧

1.ref可以获取到dom元素(<div ref='textDiv'></div> ,this.$refs.testDiv),也可以获取子组件中的data和去调用子组件中的方法;

子组件:

<template><div></div></template>

<script>export default { data:{msg:'子组件的data'},

methods: { 

 open() { console.log("子组件方法执行") } 

openPar(){ console.log('调用父组件的方法');this.$emit("parentF");}

 }}</script>

父组件:获取子组件的data和方法(open);

<template>

<divid="app">

<HelloWorld ref="hello" @parentF='getData'/>

<button @click="getHello">获取helloworld组件中的值</button>

</div></template>

<script>

import 引入子组件;

export default {

 components: { HelloWorld }, data() { return {} },

 methods: { 

 getHello() { 

 console.log(this.$refs.hello.msg);//获取数据

 this.$refs.hello.open();//调用子组件的方法

 this.$refs.hello.openPar();//调用父组件的方法

    } }

getData(){

console.log('aldkjl')

}


};

子组件调用父组件的方法:openPar(){ console.log('调用父组件的方法');this.$emit("parentF");}

</script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。