vue组件间通信 | 青训营笔记

65 阅读2分钟

在md书写过程中,常常要通过写代码来进行记录。代码中如果每一个数据类型都在下方进行说明的话,未免太过繁琐。因此,我决定借鉴vue的插值语法的符号{{注释}}进行注释,双花括号中的内容在该位置可以是对数据类型的标注、

event深入

当触发一个事件的时候,例如点击事件,

组件间通过绑定自定义事件进行通信。

通过自定义事件,结合$emit进行子给父传递数据。事件绑定在父组件身上,$abc="method",在方法中进行方法的激活。 例如写method(data){console.log(data);return data}; 子组件中:给原生dom绑定原生事件click,@click="$emit("abc","params"); 如此,输出则是params,接收数据则只需要在方法前进行赋值。

v-model高级使用

v-model可以作为组件间通信方式的一种。

先讲讲v-model的基本使用,如果在input框中绑定v-model="msg",需要先创建一个响应式数据,用来接受input中的v-model绑定的值。这样只要input中输入内容发生改变,msg就会实时发生变化。

如何手写v-model。

截屏2023-05-02 14.39.02.png 高级使用(作为一种组件间通信方式)。

截屏2023-05-02 14.42.08.png 在子组件中,先接受数据,props:["value"],要写input标签,给它绑定上v-bind:value="value",并且监听原生时间input,写成:@input=$emit('input',$event.target.value)

第一条和第二条的子组件的使用,使用起来的效果是一模一样的。

sync修饰符实现数据同步

sync与v-model差不多。

截屏2023-05-02 15.27.31.png 在子组件当中,不使用sync修饰符,先】用props接受数据money,并且在子组件中给button绑定点击事件,写法如此:@click=$emit('updata:money',{{数据,需要传给父组件的数据}})

$attrs和$listeners

它们两者是组件实例的属性,可以获取到父组件给子组件传递的props和自定义事件,但是如果子组件的props接收,则无法在attrs中收到数据。 在子组件中,用v-on='listeners"或者vbind=listeners"或者v-bind='attrs'。

$children和$parent

在vue组件中,可以通过给子组件绑定ref,写成ref="abc",如此即可通过this.$refs.{{子组件名字}}.{{子组件的数据(通常保存在data中)}}操作子组件的数据和方法

$children组件实例的属性,可以获取到当前组件的所有子组件,传出一个数组。

$parent组件实例的属性,可以获取到当前组件的父组件,进而操作父组件的数据和方法。

混入mixin

如果项目中出现很多结构相似的功能,首先想到的是组件的复用。

如果项目中出现很多js业务逻辑相似时,优先想到mixin。它可以把多个组件js重复,相似的地方提取出来。 例如一个method方法,在两个组件中是相同的。我们先创建一个js文件,将method方法整个提取出来,对外暴露一个对象,对象里面则是method方法,写法如下:method:{{{代码放这里}}}。 最后在需要使用的组件中引入,在配置项中写mixin:{{引入的重命名}}

插槽

有三种插槽,他们都能实现父子间通信

  1. 默认插槽
  2. 具名插槽
  3. 作用域插槽

作用域插槽

子组件的数据来源于父组件,但是子组件无法决定它的外观与结构。

父组件如下: 截屏2023-05-02 17.17.55.png

子组件如下: 截屏2023-05-02 17.18.41.png