vue3 如何从槽发出数据
时间:2022-07-24
本文章向大家介绍vue3 如何从槽发出数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
如何从槽发出数据
您知道如何通过使用范围限定的插槽将数据传递到插槽中,但是如何返回通信呢?
你将一个方法传递到槽中,然后在槽中调用那个方法。您不能发出事件,因为插槽与父组件共享相同的上下文(或作用域)。
// Parent.vue
<template>
<Child>
<template #default="{ clicked }">
<button @click="clicked">
Click this button
</button>
</template>
</Child>
</template>
// Child.vue
<template>
<div>
<!-- Pass `handleClick` as `clicked` into our slot -->
<slot :clicked="handleClick" />
</div>
</template>
在这篇文章中,我们将涵盖为什么这个工作,以及:
- 从槽发送到父节点
- 当一个槽与父线程共享作用域时意味着什么
- 从槽发送到祖父组件
- 更深入地了解如何使用方法从槽中返回通信
从槽发送到父节点
现在让我们来看看父组件:
// Parent.vue
<template>
<Child>
<button @click="">
Click this button
</button>
</Child>
</template>
在子组件的槽内有一个按钮。当按钮被单击时,我们希望调用父组件内部的一个方法。如果按钮不在插槽中,而是直接作为父组件的子组件,我们可以访问组件上的方法:
// Parent.vue
<template>
<button @click="handleClick">
Click this button
</button>
</template>
当按钮组件位于插槽内时,情况也是如此:
// Parent.vue
<template>
<Child>
<button @click="handleClick">
Click this button
</button>
</Child>
</template>
这之所以有效,是因为槽与父组件共享相同的作用域。
插槽和模板作用域
我以前讨论过Vue组件中的作用域,但这是一种新的作用域类型,我还没有讨论过它。
(我将其称为“模板范围”,我将需要在某一时刻对这篇文章进行后续工作!)
模板作用域就是这样的:模板内的所有内容都可以访问在组件上定义的所有内容。
这包括所有元素、所有插槽和所有作用域插槽。
无论按钮位于模板中的哪个位置,它都能访问handleClick方法。
乍一看,这可能有点奇怪,这也是为什么插槽很难理解的原因之一。槽最终被呈现为子组件的子组件,但它不与子组件共享作用域。相反,它充当父组件的子组件。
我在这篇文章中探讨了这个想法——老虎机假装不是什么东西。
从一个槽发送到祖父节点
如果我们想要从槽发射到祖父组件,我们使用常规的$emit方法:
// Parent.vue
<template>
<Child>
<button @click="$emit('click')">
Click this button
</button>
</Child>
</template>
因为槽与父组件共享相同的模板作用域,所以在这里调用$emit将从父组件发出一个事件。
从一个槽里发射回孩子
那么返回到子组件的通信呢?
我们刚刚看到,在槽中调用$emit将从父组件向祖父组件发送一个事件,因此这已被排除。
但是我们知道如何将数据从child传递到槽中:
// Child.vue
<template>
<div>
<slot :data="data" />
</div>
</template>
以及如何在作用域槽内使用它:
// Parent.vue
<template>
<Child>
<template #default="{ data }">
{{ data }}
</template>
</Child>
</template>
除了传递数据,我们还可以将方法传递到作用域槽中。如果我们以正确的方式连接这些方法,我们可以使用它来与子组件通信:
// Parent.vue
<template>
<Child>
<template #default="{ clicked }">
<button @click="clicked">
Click this button
</button>
</template>
</Child>
</template>
// Child.vue
<template>
<div>
<!-- Pass `handleClick` as `clicked` into our slot -->
<slot :clicked="handleClick" />
</div>
</template>
- 一条执行时间两天半的sql语句简化(r4笔记第62天)
- 05-01总结方法,数组(一维)
- 02 Java类的加载机制
- 权限管理系统
- 03 JVM的垃圾回收机制
- Tomcat就是这么简单
- Servlet第三篇【request和response介绍、response的常见应用】
- 通过java来格式化sql语句(r4笔记第61天)
- Servlet第四篇【request对象常用方法、应用】
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
- Java类加载器(用户自定义类加载器实现)
- Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
- 一个oracle蠕虫病毒 (r4笔记第60天)
- 提高效率,eclipse上你可能不知道的技巧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法