复习加巩固:vue组件间通信、数据传递(父子组件,同级组件)

一、组件目录结构

  • 父组件:app.vue
  • 子组件:page1.vue
  • 子组件:page2.vue

二、通信过程介绍

1.父组件向子组件传值

1.1在父组件中引入需要通信的子组件

import Page1 from "./components/page1";

1.2 在父组件的components中注册该子组件

components: {
    Page1
  }

1.3 在父组件的template中使用子组件

<page1></page1>

1.4 将需要传递给子组件的值通过v-bind(如果传递的是固定值,则不需要v-bind,直接属性名,属性值传递即可)

<page1 :price="price"></page1>

//  此处的price则是传递给子组件的值

1.5 在对应的子组件中,通过props属性接收传递过来的值

props:{
        price:{
            type:String,
            default:''
        }
  }

1.6 在子组件中使用该值

<p><span>单价:</span><span>{{price}}</span></p>

2.子组件向父组件中传值

2.1 在page1.vue中,通过触发子组件的方法(这里是自定义的downPrice方法),

 <p><span>单价:</span><span>{{price}}</span> <button @click="downPrice">降价1元</button></p>

2.2 在子组件的methodsdownPrice中,通过this.$emit(),将事件和参数传递给父组件

downPrice(count){
            this.$emit('downPrice',count)
  }

// downPrice 是传递给父组件的事件,父组件触发并相应这个方法
// count 传递给父组件的参数,在父组件中,可以对和这个参数进行相应操作

2.3 在父组件中接受子组件传递的事件downPrice和数据

<page1 :price="price" @downPrice="downPrice"></page1>

2.4 父组件对接收到的事件和数据做出响应

downPrice(count) {
      this.price = (this.price - 1).toString();
      // this.price = (this.price - count).toString();
    }

3、父组件调用子组件方法

方法一:

3.1 在使用子组件时,给子组件加一个ref引用

<page1 :price="price" @downPrice="downPrice" ref="page1"></page1>

3.2 父组件通过this.$refs即可找到该子组件,也可以操作子组件的方法

this.$refs.page1.子组件方法

方法二:

3.3 通过$children,可以获取到所有子组件的集合

this.$children[0].某个方法

4、子组件调用父组件方法

4.1 通过 $parent可以找到父组件,进而调用其方法

this.$parent.父组件方法

5、平级组件通信

5.1 定义一个公共文件 eventBus.js

import Vue from 'vue'
export default new Vue()

5.2 在需要通信的同级组件中分别引入eventBus.js文件

import bus from  '../eventBus.js'

5.3 在page1.vue中,通过$emit将事件和参数传递给page2.vue

price(newPrice){
          bus.$emit('priceChange',newPrice,this.count) 
} 

5.4 在page2.vue 中,通过$on接收接收参数和相应事件

bus.$on("priceChange", (price, count) => {
      this.balance = this.totalMoney - price * count;
    });

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值