我正在使用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>
答案 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);