点击按钮时隐藏弹窗

问题描述 投票:0回答:1

我试图在一个angular应用中隐藏一个按钮点击时的弹出窗口。我在一个组件中打开了弹出窗口,因此我把这个组件导入到弹出窗口内容组件中(在那里我有一个关闭按钮),以便访问弹出窗口本身。我注册了一个点击事件,它应该关闭弹出窗口。但如果我点击关闭按钮,什么都没有发生。

你可以在这里找到stackblitz。https:/stackblitz.comeditangular-dxpopup-vffzdr。

angular devextreme-angular
1个回答
0
投票

我不会用你现在的方式去做。

你正在将一个应用程序组件的实例导入到sender组件中。从架构上来说,我想说,这是很棘手的。就Angular中的组件而言,构造函数一般是用来注入的。我理解那里有解释的空间,但我可以肯定地说,在创建大概数百个组件的过程中,我不记得通过构造函数将数据或其他组件引用(特别是应用程序)传递到组件中。只能注入。否则你可能最终会出现无法清理的引用和其他各种各样的问题。一般来说,输入和服务是你把数据传入组件的方式。

我会做的,是在sender组件中创建一个输出,"closeClicked",或者类似的东西。当点击按钮被触发时,该输出就会被触发(所以一个EventDispatcher会触发一个事件,"嘿,我的close按钮被点击了!!!")。

然后,当你使用senderComponent时(你在app.component.html中这样做),你为该输出设置了一个处理程序(所以这将在你的app.component.ts中)。现在,当你点击关闭时,sender组件会告诉app.component,"我的关闭按钮被点击了"。

在app.component.ts中,你现在可以通过模板变量引用DX组件,并调用隐藏(如果该组件有隐藏它的API的话),或者你可以直接在dx元素标记中设置一个*ngIf="hide_sender_visible",并将hide_sender_visible切换为true或false,这取决于你需要它做什么。

从架构上来说,将父元素喂养到子元素中几乎从来没有(可能从来没有)是一个好主意。最好是使用一个服务或输入来输入信息,或者使用一个服务或输出来输出数据。如果你在网上查找 "组件通信angular",你会发现有十亿篇关于这个问题的文章,基本上都是这么说的。

总之,你可能可以按照现在的方式来修复它,让它工作。但我可以合理地告诉你,如果你在面试时把这个作为代码样本提交,你可能要跳过的第一个问题就是:"你为什么不直接使用输出并隐藏元素,或者通过模板ref调用组件api?"

© www.soinside.com 2019 - 2024. All rights reserved.