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

时间:2020-10-24 00:37:22

标签: c# asp.net-core events callback blazor

我正在使用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>

1 个答案:

答案 0 :(得分:1)

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

我想传递给子组件的功能:

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);