为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET Core Blazor 模板组件

标签:
.NET

ASP.NET Core Blazor 模板组件

  • Blazor 的模板化组件是类似于 vue 模板组件的东西,其定义是:接受一个或多个 UI 模板作为参数的组件,可将其用作组件呈现逻辑的一部分。 模板化组件允许你创作比常规组件更易于使用的更高级别的组件。 几个示例包括:
    • 允许用户为表的标头、行和脚注指定模板的表组件。
    • 允许用户在列表中指定用于呈现项的模板的列表组件。

模板参数

  • 模板化组件通过指定 RenderFragment 或 RenderFragment类型的一个或多个组件参数进行定义。 呈现片段表示要呈现的 UI 段。 RenderFragment 采用可在调用呈现片段时指定的类型参数。
  • TableTemplate 组件:
@typeparam TItem

<table class="table">
    <thead>
        <tr>@TableHeader</tr>
    </thead>
    <tbody>
        @foreach (var item in Items)
        {
            <tr>@RowTemplate(item)</tr>
        }
    </tbody>
    <tfoot>
        <tr>@TableFooter</tr>
    </tfoot>
</table>

@code {
    [Parameter]
    public RenderFragment TableHeader { get; set; }

    [Parameter]
    public RenderFragment<TItem> RowTemplate { get; set; }

    [Parameter]
    public RenderFragment TableFooter { get; set; }

    [Parameter]
    public IReadOnlyList<TItem> Items { get; set; }
}
  • 使用模板化组件时,可以使用与参数名称匹配的子元素(在以下示例中为 TableHeader 和 RowTemplate)指定模板参数:
<TableTemplate Items="pets">
    <TableHeader>
        <th>ID</th>
        <th>Name</th>
    </TableHeader>
    <RowTemplate>
        <td>@context.PetId</td>
        <td>@context.Name</td>
    </RowTemplate>
</TableTemplate>

模板上下文参数

  • 作为元素传递的类型 RenderFragment 的组件参数具有一个名为 context 的隐式参数(例如,前面的代码示例 @context.PetId),但你可以使用子元素上的 Context 特性来更改参数名称。 在下面的示例中,RowTemplate 元素的 Context 特性指定了 pet 参数:
<TableTemplate Items="pets">
    <TableHeader>
        <th>ID</th>
        <th>Name</th>
    </TableHeader>
    <RowTemplate Context="pet">
        <td>@pet.PetId</td>
        <td>@pet.Name</td>
    </RowTemplate>
</TableTemplate>

或者,您可以在 component 元素上指定 Context 特性。 指定的 Context 特性适用于所有指定的模板参数。 如果要为隐式子内容指定内容参数名称(不包含任何换行子元素),这会很有用。 在下面的示例中,Context 特性显示在 TableTemplate 元素上,并应用于所有模板参数:

<TableTemplate Items="pets" Context="pet">
    <TableHeader>
        <th>ID</th>
        <th>Name</th>
    </TableHeader>
    <RowTemplate>
        <td>@pet.PetId</td>
        <td>@pet.Name</td>
    </RowTemplate>
</TableTemplate>

泛型类型化组件

  • 模板化组件通常是通用类型。 例如,泛型 ListViewTemplate 组件可用于呈现 IEnumerable 值。 若要定义一般组件,请使用@typeparam 指令指定类型参数:
@typeparam TItem

<ul>
    @foreach (var item in Items)
    {
        @ItemTemplate(item)
    }
</ul>

@code {
    [Parameter]
    public RenderFragment<TItem> ItemTemplate { get; set; }

    [Parameter]
    public IReadOnlyList<TItem> Items { get; set; }
}

当使用泛型类型的组件时,将在可能的情况下推断类型参数:

<ListViewTemplate Items="pets">
    <ItemTemplate Context="pet">
        <li>@pet.Name</li>
    </ItemTemplate>
</ListViewTemplate>

否则,必须使用与类型参数的名称匹配的属性显式指定 type 参数。 在下面的示例中,TItem=“Pet” 指定类型:

<ListViewTemplate Items="pets" TItem="Pet">
    <ItemTemplate Context="pet">
        <li>@pet.Name</li>
    </ItemTemplate>
</ListViewTemplate>

总结

  • 总的来讲,跟 vue 的模板组件形式上差不多,用法有不同。他们都是同样的思想,将常用的组件变成模板达到共用的目的。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消