代码之家  ›  专栏  ›  技术社区  ›  Tom Crosman

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

  •  0
  • Tom Crosman  · 技术社区  · 5 年前

    我正在使用Javascript互操作为我最喜欢的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();
    }
    

    我的childcomponent有以下参数:

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

    <ChildComponent GetEvents="GetEvents"></ChildComponent>
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Tom Crosman    5 年前

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

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

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