将带有参数的函数传递给子组件



我正在使用Javascript interop为我最喜欢的一些Javascript插件编写blazor组件包装器。

我的父组件具有以下功能:

async Task<IEnumerable<DpEvent>> GetEvents(DateRange dateRange)
{
return await EventManager.GetEvents().Where(e => e.StartDate >= dateRange.StartDate).Where(e => e.EndDate <= dateRange.EndDate).ToListAsync();
}

我的子组件有这个参数:

[Parameter] public Func<DateRange, Task<IEnumerable<DpEvent>>> GetEvents { get; set; }

我必须做什么才能将GetEvents方法传递给我的子组件,如下所示:

<ChildComponent GetEvents="GetEvents"></ChildComponent>

我能够通过为回调创建一个自定义委托来解决这个问题。

我想传递给子组件的函数:

async Task<IEnumerable<DpEvent>> GetEvents(DateRange dateRange)
{
return await EventManager.GetEvents().Where(e => e.StartDate >= dateRange.StartDate).Where(e => e.EndDate <= dateRange.EndDate).ToListAsync();
}

我的代表的定义和声明:

public delegate Task<IEnumerable<DpEvent>> GetEventsDelegate(DateRange dateRange);
public GetEventsDelegate GetEventsCallBack;

将我的代表分配到我的职能:

protected override async Task OnInitializedAsync()
{
GetEventsCallBack = GetEvents;
}

将我的代理传递给我的子组件:

<ChildComponent GetEvents="GetEventsCallBack"></ChildComponent>

我的子组件上的参数:

[Parameter] public Func<DateRange, Task<IEnumerable<DpEvent>>> GetEvents { get; set; }

最后,我的子组件可以使用委托:

IEnumerable<DpEvent> dpEvents = await GetEvents.Invoke(dateRange);

相关内容

  • 没有找到相关文章

最新更新