如何从组件内部调用组件的destroy?

2024-01-08

我有一个模态组件,我希望能够在用户单击 x 按钮时销毁它,我还有一个通知弹出窗口,它会在一段时间后自行销毁,但我想让用户能够通过以下方式关闭它: x 按钮也是如此。 我知道我可以将事件传递给组件,但我认为如果组件具有自毁性,那就更好了。 对于这种情况也可能有更好的设计,但这就是我的想法,其他指针将不胜感激。


如果破坏是指从 DOM 中删除节点,那么您所需要做的就是使用 Svelte 获取对组件中最顶层元素的引用bind:this并使用删除所述元素Node.removeChild():

<script>
  let nodeRef
</script>

<div bind:this={nodeRef}>
  <h3>Hey I'm a component</h3>
  <button on:click={() => nodeRef.parentNode.removeChild(nodeRef)}>
    Remove me :(
  </button>
</div>

演示 REPL https://svelte.dev/repl/22d8c178f6434874b9c281bb6041d286?version=3.23.0

Edit

我没有注意到提出不同方法的要点。由于模式或通知的显示将由父组件触发(无论是来自用户操作还是作为编程响应),因此对我来说,父组件也可以处理模式或通知的关闭更自然。

您不必使用事件来处理关闭模式或通知,您只需将关闭处理程序作为 prop 传递即可。这也将使您不必自己处理节点删除(或节点创建/追加)。

像下面这样的东西会更“Svelte-like”:

应用程序.svelte

<script>
  import MyModal from './MyModal.svelte'

  let showModal = false
</script>

<div>
  {#if showModal}
    <MyModal onClose={() => showModal = false} />
  {/if}
  <button on:click={() => showModal = true}>Show Modal</button>
</div>

MyModal.svelte

<script>
  export let onClose
</script>

<div>
  <h3>Hi I'm a modal <span on:click={onClose}>X</span></h3>
</div>  

演示 2 REPL https://svelte.dev/repl/582ebe32411a44e1824d0b250c53085b?version=3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从组件内部调用组件的destroy? 的相关文章

随机推荐

  • Java JDK 8 IndexedPropertyDescriptor 自 JDK 7 以来已更改为 List 对象

    我有一个简单的问题 我有一个在 Java JDK7 中运行的程序 但由于一些内省更改而无法在 JDK8 中运行 这是重现该问题的测试程序 import java beans BeanInfo import java beans Intros
  • 使用异常时 SFINAE 仍然产生错误

    我正在学习 C 中的 SFINAE 因此 在阅读完相关内容后 我正在尝试不同的示例以更好地理解这个概念 下面我给出了 2 个片段 其中 1 个我能理解 但第二个片段是我使用过的noexcept在声明中我无法理解 实施例1 这个我能理解 in
  • 抽象工厂和控制反转在运行时解析

    我有以下类和接口结构 并且我很难尝试让代码执行我需要的操作 public interface IUserManager int Add User user public class UserManagerA IUserManager pub
  • 在控制台应用程序中获取连接字符串[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我创建了一个控制台应用程序项目 然后将新的 App conf 文件添加到我的项目中 在我的配置文件中 我复制了通过添加实体框架创建
  • 将多个项目添加到一个 Git 存储库中

    我是设置 Git 服务器的新手 我想在单个 Git 存储库下添加多个项目 目前我有一个 Git 存储库 其中仅包含一个项目 该项目在单个文件夹中包含 IOS 项目代码 现在 我遇到了一种情况 我需要在同一存储库下但在不同的文件夹中添加 MA
  • 分配零容量ByteBuffer [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 谁能告诉我分配零长度缓冲区的可能目的是什么 ByteBuffer allocate 0 no IllegalArgumentException
  • 将字节的二进制字符串表示形式转换为 Python 中的实际二进制值

    我有一个字节的二进制字符串表示形式 例如 01010101 如何将其转换为真正的二进制值并将其写入二进制文件 Use the int功能 http docs python org library functions html int wit
  • 智能脸4.3.0。 IOS模拟器错误

    Smartface 模拟器适用于 Android 但对于 ios 它给我 保持冷静 您需要从应用商店下载正在运行的 Smartface 然后重试 错误 但我已经安装了 我的itunes版本是12 1 2 我检查了防火墙 它没有阻止 idb
  • 有什么方法可以用预处理器替换部分单词吗?

    我的 Objective C 课上有类似的东西 interface PREFIX MyClass end 我想使用预处理器将其转换为 interface AwesomeMyClass end 所以像 define PREFIX Awesom
  • C/C++ 中文件名中的下划线有什么规则吗?

    我知道有使用下划线的规则身份标识在 C C 中 https stackoverflow com a 228797 1995714 在源代码文件名中使用它们有什么规则吗 例如 对于以下划线开头或结尾的文件名是否有任何限制 或者将下划线作为最后
  • java中如何将对象添加到ArrayList中

    这里有两个类 查询语句和stackov 数组列表用于存储查询语句类的对象 但是最近添加的对象会覆盖之前的对象 如何添加对象以使它们不被覆盖 查询语句 java public class QuerySentence public static
  • 将 WinForms 应用程序与本机 DLL 一起打包

    尝试找出如何使用 Visual Studio 2017 Desktop Bridge 应用程序打包项目 打包以下解决方案 NET 库 DLL WinForms 可执行文件引用 1 本机 C DLL 通过 DllImport 导出 1 和 2
  • el-api-1.0.jar - jar 未加载 - 违规类:javax/el/Expression.class

    我正在尝试使用 RestEasy 运行一个简单的安静服务 以下是我的设置 汤姆猫7 Eclipse 和 Maven Maven 安装并将 war 文件复制到 webapps 文件夹 部署 war 文件时 catalina out 文件会显示
  • 使用 strtod strtof atof printf 进行区域设置不变的字符串处理?

    是否有计划添加在当前语言环境下不变的 C 标准库字符串处理函数版本 目前有很多脆弱的解决方法 例如来自 jansson strconv c 的 static void to locale strbuffer t strbuffer cons
  • 将 c 字符串中的字符转换为其转义序列

    我需要一个像这样的函数字符串ToLiteral 字符串输入 from 这个帖子 https stackoverflow com questions 323640 can i convert a c string value to an es
  • 如何在存储过程之间共享数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 MS SqlServer 中 存
  • Lighttpd 配置,.我的查询字符串中的(点)导致 404

    我的网站上有一个地址 如下所示 http www example com lookup q http 3A 2F 2Fgigaom com 2F2010 2F10 2F10 2f Angry birds for windows 7 phon
  • Symfony2:设置 cookie

    我正在尝试在登录控制器中设置 cookie 以实现 记住我 系统 尽管我使用了在网上找到的确切代码 但对我来说事情还是出了问题 我希望你能帮我弄清楚我错过了什么 让我们看一下代码 public function loginAction Re
  • 为什么short在C中的结构体中存储为4个字节?

    我有以下两个结构 问题是 sizeof Content 返回 160 该结构由 11 个短整型 6 个整数 76 个字符 7 个浮点 1 个双精度组成 总共添加到 158 个字节 我数了三遍 还是有2个字节的差别 typedef struc
  • 如何从组件内部调用组件的destroy?

    我有一个模态组件 我希望能够在用户单击 x 按钮时销毁它 我还有一个通知弹出窗口 它会在一段时间后自行销毁 但我想让用户能够通过以下方式关闭它 x 按钮也是如此 我知道我可以将事件传递给组件 但我认为如果组件具有自毁性 那就更好了 对于这种