这是我参与「第四届青训营 」笔记创作活动的的第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)
- event {string | Array} (自定义事件的名称,可以使用数组的方式复数注册。数组方式必须在2.2.0+中才支持)
- callback {Function} (自定义事件触发后,所执行的方法、函数)
$emit
手动触发当前实例上的一个指定事件
vm.$emit(eventName,[...args])
参数:
- eventName {string} (需要触发的事件名称)
- [...args] (传递的参数,多个参数用数组,单个参数就可以直接用参数本身的格式)
插槽
作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件===》子组件
一、默认插槽
需要slot标签占位
二、具名插槽
在需要多个插槽时使用
在组件中给插槽名字
三、作用域插槽
使用:在数据在别的地方不能直接使用时,可以利用作用域插槽拿数据
数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定(games数据在Category组件中,但使用数据遍历出来的结构由App组件决定。
<slot :games="games"></slot>
把games传给使用slot的组件(插槽的使用者)
而使用者若想收到传来的数据,需要包裹<template scope="zimingname">,scope接收传来的值,{{zimingname}}即是传来的数据
数据是一个数据,结构是由使用者而定的