如何将任务<Func<string>>传递给 Blazor 组件?



假设我有一个这样的Blazor组件…

<code>@_html</code>
@code {
private string _html = "";
}

在父组件中,有如下方法…

private async Task<string> GenerateHtml() {
// Does something and returns some HTML
}

我希望父组件有一个按钮,当用户单击按钮时,GenerateHtml()方法的返回值在子组件的Html局部变量中设置。

这样做的原因是我将在许多地方重用子组件,每个地方都有自己的方式来生成它想要的HTML。我不想把生成代码放在子组件中,但是我不知道如何把它推进去。

我试着遵循这个答案,但无法让它工作,部分原因是它在子组件中有按钮,部分原因是生成HTML的方法将是异步的。

我也试过用EventCallback这样做,但也不知道如何做到这一点。

谁能告诉我该怎么做?由于

总之,您希望提供一种从子组件调用父组件的GenerateHtml方法的方法。这很容易做到。您只需要一个与Task<string> GenerateHtml()方法签名匹配的委托类型。因为它返回一个值,所以它需要是Func<>变量之一,因为它没有参数,所以你想要Func<Task<string>>

因此你的子组件应该指定一个该类型的参数属性:

[Parameter]
public Func<Task<string>> HtmlGenerator { get; set; }

然后在父文件中,可以使用标记:

<ChildComponent HtmlGenerator="GenerateHtml" />

从那里,子组件可以通过调用HtmlGenerator()HtmlGenerator?.Invoke()来生成HTML。

相关内容

  • 没有找到相关文章

最新更新