Blazor University (17)使用 RenderFragments 模板化组件

原文链接:https://blazor-university.com/templating-components-with-renderfragements/

使用 RenderFragments 模板化组件

源代码[1]

到目前为止,我们已经创建了基于参数生成 100% 渲染输出的组件,但组件并不总是那么简单。有时我们需要创建将组件使用者提供的标记与他们自己的渲染输出混合的组件。

将内容作为 HTML 编码的字符串参数传递给组件会非常混乱(更不用说难以管理):

<Collapsible content="Lots of encoded HTML for your entire view here"/>

而且,除了维护的噩梦之外,嵌入的 HTML 也只能是基本的 HTML 标记,没有 Blazor 组件。基本上,它是没有用的,而且显然不应该这样做。正确的方法是使用 RenderFragment

子内容

如果我们创建一个名为 Collapsible 的新组件(一个完全空的 .razor 文件),如您所见,我们可以在 Index.razor 页面中使用它,如下所示:

<Collapsible/>

但是如果我们想嵌入一些内容呢?试一试,然后查看浏览器控制台输出中的错误。

<Collapsible>Hello world!</Collapsible>
WASM:System.InvalidOperationException:“TemplatedComponents.Components.Collapsible”类型的对象没有与名称“ChildContent”匹配的属性。

RenderFragment 类

现在更改 Collapsible 组件,使其具有名为 ChildContent 的属性,一种 RenderFragment 类型,并确保使用 [Parameter] 属性对其进行修饰。

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

这些是 Blazor 用于将嵌入内容注入组件的标准。嵌入的内容可能是您想要的任何内容;纯文本、HTML 元素、更多 razor 标记(包括更多组件)以及嵌入内容的内容,可以通过添加 @ChildContent 输出到组件标记中的任何位置。

<div class="row"><a href="#" @onclick=Toggle class="col-12">@ActionText</a>@if (!Collapsed){<div class="col-12 card card-body">@ChildContent</div>}
</div>@code
{[Parameter]public RenderFragment ChildContent { get; set; }[Parameter]public bool Collapsed { get; set; }string ActionText { get => Collapsed ? "Expand" : "Collapse"; }void Toggle(){Collapsed = !Collapsed;}
}

46a57ba4afbc4816e2bf29847a4401ab.gif

多个渲染片段

当我们在组件内编写标记时,Blazor 将假定它应该分配给组件上的一个参数,该参数是从 RenderFragment 类派生的并命名为 ChildContent。如果我们希望使用不同的名称或多个渲染片段,那么我们必须在标记中明确指定参数的名称。

<MyComponent><Header><h1>The header</h1></Header><Footer>This is the footer</Footer><ChildContent>The ChildContent render fragment must now be explicitly named because we havemore than one render fragment parameter in MyComponent.It doesn't have to be named ChildContent.</ChildContent>
</MyComponent>

在前面的示例中,我们只需要显式指定 <ChildContent>,因为我们显式使用了一个或多个其他渲染片段(页眉和页脚)。如果我们不想指定 <Header><Footer> 则无需显式命名 <ChildContent>,Blazor 将假定 <MyComponent></MyComponent> 之间的所有标记都是为 ChildContent 渲染片段。

有关详细信息,请参阅将数据传递给 RenderFragment[2]

参考资料

[1]

源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/TemplatedComponents/TemplatedComponents

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL® ES 3.0 Programming Guide - Book Website

OpenGL ES 3.0 Programming Guide - Book Website http://opengles-book.com sample codes in GitHub: https://github.com/danginsburg/opengles3-book/

ArcGIS实验教程——实验六:空间数据格式转换

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】 空间数据从一个GIS平台跨到另一个GIS,必须经过格式转换,才能实现数据信息共享。本实验主要讲述空间数据矢栅互转、CAD(DWG)数据和Shapefile数据互转、栅格数据与ASCII文件之间的转换…

php基础教程 第五步 逻辑控制

逻辑判断 在开发项目时&#xff0c;竟然会出现逻辑控制。例如当用户输入“hello”时你需要自动回复“hello 欢迎”&#xff0c;当用户设置的定时时间到达时&#xff0c;你需要提醒用户时间已经结束&#xff1b;再举个例子&#xff0c;在玩网络游戏时&#xff0c;用户控制的角色…

在春意盎然的季节里初识GIT

Git 与 SVN 区别 GIT不仅仅是个版本控制系统&#xff0c;它也是个内容管理系统(CMS),工作管理系统等。 如果你是一个具有使用SVN背景的人&#xff0c;你需要做一定的思想转换&#xff0c;来适应GIT提供的一些概念和特征。 Git 与 SVN 区别点&#xff1a; 1、GIT是分布式的&…

WinForm混合Blazor(下)

有时&#xff0c;为了省事&#xff0c;我们也可以把窗体的控件注入到ServiceCollection中&#xff0c;在razor中订阅事件&#xff0c;这样就省了中间的桥梁&#xff0c;直接用控件当桥梁&#xff0c;下面以一个Button和Timer为例&#xff0c;来展示使用方式。本例是把Button和T…

ArcGIS实验教程——实验七:矢量数据空间校正(Spatial Adjustment)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】 本系列实验教程实验二讲述了栅格数据的数字化之前必须进行的操作--地理配准(地理配配准完整操作步骤),栅格地理配准和矢量空间校正都属于几何校正的内容,关于空间校正、地理配准、…

数据结构之冒泡排序

1 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来 算法过程如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一…

博图程序需要手动同步_贴吧求助帖博图实例单按钮控制灯的程序

接上一期在贴吧看见的求助帖(上图看得见水印)&#xff0c;因为没人回复&#xff0c;发帖的楼主好像删除了帖子。结果我抽时间用博图15.1&#xff0c;S71200做了一个&#xff0c;希望给需要帮助的新人能够起到作用&#xff0c;感觉有用的话可以关注一下我的公众号低压电工&#…

操作系统,,,也考完了【流坑】

操作系统博大精深岂是区区2学分能容&#xff1f;学习了一些机制和理论模型之后课外还是要继续学习转载于:https://www.cnblogs.com/learn-to-rock/p/5447750.html

php基础教程 第六步 学习数组以及条件判断switch补充

条件语句 switch 在上一节的学习中&#xff0c;学习了php的条件语句if。在php编程中进行条件判断还可以使用switch语句。switch语句语法如下&#xff1a; <?php switch (值或表达式) { case 值等于值1:当值等于值1时要执行的代码break; case 值等于值2:当值等于值2时要执…

ArcGIS实验教程——实验八:矢量数据拼接

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】 数字化工作都是分工完成的,那么数字化完成之后,怎样将各部分数字化的成果拼接成一个完整的矢量数据呢?本实验针对线状和面状矢量数据,讲解矢量化数据拼接的常用方法:合并(merge)…

iOS 类库列表

1. LinqToObjectiveC #import "NSArrayLinqExtensions.h" 它为NSArray添加了许多方法&#xff0c;能让你用流式API来转换、排序、分组和过滤其中的数据。转载于:https://www.cnblogs.com/SimonGao/p/4747065.html

dotnet-exec 小工具

dotnet-exec 小工具Intro在之前的文章中很多会有一些示例代码&#xff0c;这些代码一般都是一些很小的示例&#xff0c;尤其是介绍一些新特性的示例&#xff0c;基本上不会引用其他包&#xff0c;只有 SDK 就可以执行&#xff0c;对于这些示例&#xff0c;一般会每个实例单独一…

安卓手机抓包charles乱码_charles-抓包Andriod 手机的设置

长按弹出修改后&#xff1a;charles如果不配置SSL通用证书&#xff1b;会导致HPPTS协议的域名抓取失败/乱码的现象&#xff1b;现在SSL越来越多&#xff0c;很多博客都上了SSL&#xff0c;支付相关的行业更是基础配置&#xff1b;charles配置SSL证书&#xff0c;算起来很简单&a…

分布式服务下的关键技术(转)

系统架构演化历程-初始阶段架构 初始阶段的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP&#xff08;linux、apache、mysql、php&#xff09;。 特征&#xff1a; 应用程序、数据库、文件等所有的资源都在一台服务器上。 描述&#xff1a; 通常服…

ArcGIS实验教程——实验九:矢量数据提取

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】本实验以矢量数据为实验数据,讲解矢量数据的提取方法及注意事项。 一、实验内容 1、直接选取,导出(所有要素) 2、导出视图范围中的所有要素 3、按指定的裁剪框裁剪数据 4、按指…

linux之sort命令

1 sort命令的参数 sort 参数(可以省略) file 具体参数如下 -b:忽略每行前面开始的空格字符,空格数量不固定时,该选项几乎是必须要使用的("-n"选项隐含该选项,测试发现都隐含) -c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序 -C:类似于&q…

php基础教程 第七步数组补充及循环基础

键值对 上一节中简单的了解了数组的定义、取值及存储&#xff0c;这一节补充一下上一节数组的内容。 在上一节中&#xff0c;我们知道索引是用来标记值的位置&#xff0c;通过索引可以取得当前位置的值。这种一个索引对应着一个值的关系是一个映射关系&#xff0c;称为键值对。…

vs2013 c# 中调用 c 编写的dll出错的可能错误

先说出错原因: 堆栈调用顺序 解决办法: 使用 __stdcall 或 使用C#属性 CallingConvention 起因是我想在c#中调用c函数结果出错了 如下 C 头文件 #define DLLExport extern "C" __declspec(dllexport)DLLExport int func(int a, int b);DLLExport void init…

jemter在linux上怎么安装_办公便签软件怎么下载?怎么在电脑桌面上下载安装一款办公便签软件...

走进一间办公室的话&#xff0c;你会看到很多人都在电脑前辛勤地忙碌。确实&#xff0c;随着互联网技术的应用和普及&#xff0c;现在很多上班族都离不开电脑&#xff0c;甚至需要终日在电脑前伏案办公。也正是因为这样&#xff0c;很多人都想在电脑上下载安装一款办公便签软件…