c# - 如何从 Blazor Server 中的页面处置(销毁)组件?
问题描述
我想知道如何在用户关闭模态窗口组件后正确处置(销毁)它。现在的样子,从 DOM 中移除,但实例留在服务器中(重新打开窗口时分配给 form-control 的时间值保持不变)并且组件中的 Dispose() 没有被调用.
@page "/"
<button class="btn btn-primary" @onclick="@(e => modalWindow.Show())">Open Dialog</button>
<ModalWindowToDispose @ref="modalWindow" ></ModalWindowToDispose>
@code {
ModalWindowToDispose modalWindow;
void OpenDialog()
{
modalWindow.Show();
}
}
// ModalWindowToDispose Component ( Show here in the same page only for simplicity)
@implements IDisposable
@if (ShowPopup)
{
<div class="modal" tabindex="-1" style="display:block;margin-top:100px" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<input class="form-control" type="text" value="@temp" placeholder="" />
<button class="btn btn-primary" @onclick="@(e => ShowPopup = false)">Close</button>
</div>
</div>
</div>
}
@code {
bool ShowPopup = false;
string temp = DateTime.Now.ToLongTimeString();
public void Show()
{
ShowPopup = true;
StateHasChanged();
}
void IDisposable.Dispose()
{
string tttt = "";
}
}
解决方案
在您的代码中,<ModalWindowToDispose />
实例始终是 DOM 的一部分。 <div class="modal"... ></div>
由于您if
上面的陈述,您只添加或删除了 , 的一部分。
要解决此问题,您可以使用容器方法,如它所做的库Blazored.Modal,它们将“模态问题”分为两个类。modal 是容器,ModelInstance是在modal 关闭时应该释放的组件。如果模态实例被关闭,它会从容器中移除并因此被丢弃,因为它不再是 DOM 的一部分。
推荐阅读
- react-native - React Native StackNavigator Reference Null on Props
- jquery - jquery 通过单击将 append() 元素相互切换
- rabbitmq - RabbitMQ 中的优先级是如何实现的
- python - 如何通过 peewee 在 sqlite 中存储 python 列表和字典数据类型
- react-native - 为什么 fontfamily 样式不适用于反应原生项目
- graphql - NestJS:使用 ResolveProperty 的问题。得到“ UnhandledPromiseRejectionWarning: TypeError:”
- xslt - 如何将特定文本从一个部分复制到新部分?
- html - 使用 rvest 抓取多个 URL
- google-apps-script - 如何在 G Suite 中包含的工作表中授予模态对话框弹出的权限
- excel - 更新 - 请参阅编辑摘要:VBA 新手:代码很慢,在完成之前进入 Excel“无响应”