gpt4 book ai didi

blazor - 如何从子组件获取对 Blazor MainLayout 的引用

转载 作者:行者123 更新时间:2023-12-04 12:36:31 26 4
gpt4 key购买 nike

我在 Blazor 服务器端应用程序的 MainLayout 中放置了一些全局 Blazor 组件。它们用于显示警报、确认、警告......
如何从子组件获取对 MainLayout 的引用以调用我的全局警报、确认函数?
子组件是动态的,可以在任何嵌套级别。所以我们不知道从它到根 MainLayout 有多少层。
这就像 Winform 应用程序中 ApplicationContext.MainForm 的概念。
谢谢你。

最佳答案

使用注册服务(单一或范围)怎么样。该服务实现了一个在子组件想要显示警报时抛出的事件。 MainLayout 监听警报服务的事件,如果抛出新事件,则 MainLayout 显示警报。
该服务可能如下所示:

 public class AlertService
{
public event EventHandler<AlertEventArgs> AlertMessageChanged;

protected virtual void OnAlertMessageChanged(AlertEventArgs e)
{
EventHandler<AlertEventArgs> handler = AlertMessageChanged;
if (handler != null)
{
handler(this, e);
}
}

public void SetAlertMessage(string alertMessage)
{
var eventArgs = new AlertEventArgs();
eventArgs.AlertMessage = alertMessage;
OnAlertMessageChanged(eventArgs);
}
}
在 AlertEventArgs 中,可能有一个属性“ AlertMessage ”或类似的东西。
在 MainLayout 中,您为 注册了一个事件处理程序。 OnAlertMessageChanged 事件
@inherits LayoutComponentBase
@inject AlertService alertService

<div class="main">
...
</div>

@code {

override void OnInitialized()
{
base.OnInitialized();
alertService.AlertMessageChanged += HandleAlertMessageChanged;
}

private void HandleAlertMessageChanged(AlertEventArgs args)
{
//Show the alert
}
}
对于确认或警告,您可以扩展现有服务或创建新服务,当然,您需要注册这些服务。

关于blazor - 如何从子组件获取对 Blazor MainLayout 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64299530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com