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

69 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天

方法一、props/$emit

父组件A通过props的方式向子组件B传递,B to A 通过在 B 组件中 $emit, A 组件中 v-on 的方式实现。

1.父组件向子组件传值

父组件通过props向下传递数据给子组件。

2.子组件向父组件传值(通过事件形式)

子组件通过events向父组件发送信息,实际上就是子组件把自己的数据发送给父组件

其他

v-for

作用:渲染数据

语法:<标签 v-for="(值, 索引或者属性名) in 目标结构" :key="唯一值"></标签>

注:索引或属性名可以省略不写,如果需要渲染的数据里面有唯一标识,唯一值直接使用唯一标识即可。如果没有唯一标识就可以使用索引,这种情况下索引是不能省略的

$on

用来监听(注册)自定义事件

vm.$on(event,callback)
  1. event {string | Array} (自定义事件的名称,可以使用数组的方式复数注册。数组方式必须在2.2.0+中才支持)
  2. callback {Function} (自定义事件触发后,所执行的方法、函数)
$emit

手动触发当前实例上的一个指定事件

vm.$emit(eventName,[...args])

参数:

  1. eventName {string} (需要触发的事件名称)
  2. [...args] (传递的参数,多个参数用数组,单个参数就可以直接用参数本身的格式)

插槽

作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件===》子组件

一、默认插槽

需要slot标签占位

二、具名插槽

在需要多个插槽时使用

在组件中给插槽名字

三、作用域插槽

使用:在数据在别的地方不能直接使用时,可以利用作用域插槽拿数据

数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定(games数据在Category组件中,但使用数据遍历出来的结构由App组件决定。

<slot :games="games"></slot>

把games传给使用slot的组件(插槽的使用者)

而使用者若想收到传来的数据,需要包裹<template scope="zimingname">,scope接收传来的值,{{zimingname}}即是传来的数据

数据是一个数据,结构是由使用者而定的