Vue2组件间通信

  • 核心概念:5

  • state

  • mutations

  • actions

  • getters

  • modules

插槽

适用场景:父子间组件通信 —(一般结构)

  • 默认插槽

  • 具名插槽

  • 作用域插槽

2.进阶组件间通信
1)事件相关的深入学习
  • 事件:事件已经学习过两种,第一种原生DOM事件,第二种自定义事件。

  • 组件绑定原生DOM事件,并非原生DOM事件,而是所谓的自定义事件。

  • 如果你想把自定义事件变为原生DOM事件,需要加上修饰符.native修饰

  • 这个修饰符(.native),可以把自定义事件【名字:原生DOM类型的】变为原生DOM事件,

EventTest组件

<button @click=“handler”>原生btn按钮

<Event1 @click.native=“handler1”>


<Event2 @click=“handler2” @xxx=“handler2”>

2)v-model实现组件通信?
  • v-model:指令,可以收集表单数据【text、radio、checkbox、range】等等

  • 切记:v-model收集checkbox需要用数组收集

v-model:实现原理 :value @input 还可以实现父子数据同步。

<CustomInput v-model="msg"></CustomInput>

相当于: <CustomInput :value="msg" @input="msg = $event"></CustomInput> 子组件触发的自定义事件必须是input,子代接收的props是value,否则v-model 不生效

子组件写法:<input :value="value" @input="$emit('input',$event.target.value)"/>

  • $event可以作为子组件触发自定义事件传回来的参数

深入v-model

{{msg}}


深入v-model原理

<input type=“text” :value=“msg” @input=" msg = $event.target.value"/>

{{msg}}

<CustomInput :value=“msg” @input=“msg = $event”>


子组件

input包装组件----{{value}}

<input :value=“value” @input=“ e m i t ( ′ i n p u t ′ , emit('input', emit(input,event.target.value)”/>

3)属性修饰符.sync,可以实现父子数据同步。
  • 以后在elementUI组件中出现,实现父子数据同步。

  • 和v-model实现组件通信类似

  • 可以实现父子组件数据同步,该案例在子组件绑定自定义事件(update:money)

小明的爸爸现在有{{ money }}元

不使用sync修改符

<Child :money=“money” @update:money=“money = $event”>

使用sync修改符


子组件

小明每次花100元

<button @click=“$emit(‘update:money’,money - 100)”>花钱

爸爸还剩 {{money}} 元

4)$attrs与$listeners ----vue-helper 父子组件通信
  • $attrs:组件实例的属性,可以获取到父亲传递的props数据(前提子组件没有通过props接收)

  • $listeners:组件实例的属性,可以获取到父亲传递自定义事件(对象形式呈现)

  • v-bind 可以直接赋予他一个对象,会把这些对象作为标签的属性

  • v-for 可以直接赋予他一个对象,会把这些对象作为标签的事件,属性值需要为函数

  • 以上两种用法不可以简写

自定义带Hover提示的按钮

<HintButton

type=“success”

icon=“el-icon-plus”

title=“我是中国人”

@click=“handler”

/>

子组件

添加

5)$children与$parent 可以实现父子组件通信
  • ref:可以在父组件内部获取子组件—实现父子通信【可以使用子组件的数据和方法】

  • $children:可以在父组件内部获取全部的子组件【返回数组】

  • $parent:可以在子组件内部获取唯一的父组件【返回组件实例】

BABA有存款: {{ money }}

<button @click=“JieQianFromXM(100)”>找小明借钱100

<button @click=“JieQianFromXH(150)”>找小红借钱150

<button @click=“JieQianAll(200)”>找所有孩子借钱200

<button @click=“SendInfo”>我是baba



Son

儿子小明: 有存款: {{money}}

<button @click=“geiQian(50)”>给BABA钱: 50

Daughter

女儿小红: 有存款: {{money}}

给BABA钱: 100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值