![](/img/trans.png)
[英]How can I call '/Identity/Account/ExternalLogin' from a Blazor component?
[英]How can I dispose (destroy) a component from a page in Blazor Server?
我想知道如何在用户关闭模态 window 组件后正确处置(销毁)它。 现在的方式,它从DOM中删除,但实例留在服务器中(重新打开window时分配给表单控件的时间值保持不变)并且组件中的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 的一部分。 由于上面的if
语句,您只添加或删除了<div class="modal"... ></div>
的一部分。
要解决此问题,您可以使用容器方法,例如它所做的库Blazored.Modal ,它们将“模态问题”分为两个类。 modal是容器, ModelInstance是在 modal 关闭时应该释放的组件。 如果模态实例关闭,它会从容器中移除并因此被丢弃,因为它不再是 DOM 的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.