vue父子组件通信(props、$refs 、 $emit、$parent、$children、$root)

8 篇文章 0 订阅
8 篇文章 0 订阅

vue父子组件通信(props、$refs 、 $emit、$parent、$children、$root)

Vue组件间的通信非常重要下面一起学习吧!

之前写过一篇refs的父组件控制子组件的文档,现在做个通信的总结,做人开发笔记使用!

props,$emit是子父组件传值的方法:

<template>
<!-- 子组件 -->
  <div>{{text}}</div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
props:['text'],  //第一种形式
// props: {    //第二种形式
  //   text: {
  //     type: [String, Number],   // 传值的类型
  //     default: 0   // 设置的默认值
  // },
// },
// props: {
    //     text: Array  //第三种形式
// },
  data() {
    return { }
  },
  methods: {
	show() {
		this.$emit('down','aaaaa')
	}
  }
})
</script>
<!-- 父组件 -->
<template>
  <div class="parent">
    <child @down='do' :text="a"></child>
  </div>
</template>
 
<script>
    export default {
        data(){
          return {
          	a: 123
          }
        },
        methods:{
            do(a) {
               console.log(a)
            }
        },
        components:{
            child
        }
    }
</script>

父向子 通过 $ref 获取子组件数据 调用子组件方法

<template>
<!-- 子组件 -->
  <div>{{text}}</div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
  data() {
    return {
			text: 1
	 }
  },
  methods: {
	show() {
		console.log('我是子组件')
	}
  }
})
</script>
<!-- 父组件 -->
<template>
  <div class="parent">
    <child ref=child"></child>
  </div>
</template>
 
<script>  
    export default {
        data(){
          return {
          }
        },
        methods:{
            do(a) {
               this.$refs.child.show()    // 调用子组件方法
               this.$refs.child.text = 2   // 改变子组件数据
            }
        },
        components:{
            child
        }
    }
</script>

** $children 获取子组件数据和调用子组件方法**

<!-- 父组件 -->
<template>
  <div class="parent">
    <child></child>
  </div>
</template>
 
<script>  
    export default {
        data(){
          return {
          }
        },
        methods:{
            do(a) {
               this.$children[0].show()    // 调用子组件方法   $children获取的是父组件的直接子组件数组,不获取孙组件
               this.$children[0].text = 2   // 改变子组件数据
            }
        },
        components:{
            child
        }
    }
</script>

子向父 父组件把方法传入子组件中 在子组件里直接调用这个方法

<template>
<!-- 子组件 -->
  <div>{{text}}</div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
 props: {   
	down: {
	     type: Function,   // 传值的类型
	    default: 0   // 设置的默认值
	},
  },
  data() {
    return { }
  },
  methods: {
	show() {
		this.down()
	}
  }
})
</script>
<!-- 父组件 -->
<template>
  <div class="parent">
    <child @down='do'></child>
  </div>
</template>
 
<script>
    export default {
        data(){
          return {
          }
        },
        methods:{
            do(a) {
               console.log(a)
            }
        },
        components:{
            child
        }
    }
</script>

$parent 获取父组件数据和调用父组件方法

<template>
<!-- 子组件 -->
  <div>{{text}}</div>
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
  data() {
    return { }
  },
  methods: {
	show() {
		this.$parent.do(3)   // 获取到的是直属父组件
		this.$parent.b = 2
	}
  }
})
</script>
<!-- 父组件 -->
<template>
  <div class="parent">
    <child></child>
  </div>
</template>
 
<script>
    export default {
        data(){
          return {
          		b: 1
          }
        },
        methods:{
            do(a) {
               console.log(a)
            }
        },
        components:{
            child
        }
    }
</script>

$root 获取最高层的父组件及app.vue

使用this.$root可以访问app.vue的方法和数据

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值