Blazor University (11)组件 — 替换子组件的属性

原文链接:https://blazor-university.com/components/replacing-attributes-on-child-components/

替换子组件的属性

源代码[1]

到目前为止,我们已经了解了如何创建代码生成的属性[2],以及如何捕获意外参数[3]。除了这两种技术之外,Blazor 还允许我们重写/替换子组件中的现有属性。

采取以下页面标记:

<ChildComponent first="consumer-value-1" second="consumer-value-2" />

它使用以下子组件:

<div @attributes=AllOtherAttributes>Right-click and inspect the HTML for this element to see the results!
</div>@code
{[Parameter(CaptureUnmatchedValues=true)]public Dictionary<string, object> AllOtherAttributes { get; set; }
}

正如我们之前在代码生成的属性[4]中看到的那样,ChildComponent 会将使用者提供的属性(第一个和第二个)捕获到我们的参数 AllOtherAttributes 中,并且对 @attributes=AllOtherAttributes 的调用将指示 Blazor 在 Dictionary<string, object> 中输出名称/值对。前面的代码将输出以下 HTML。

<div first="consumer-value-1" second="consumer-value-2">Right-click and inspect the HTML for this element to see the results!
</div>

替换子属性

如果我们想为 firstsecond 指定默认值以在使用者不提供它们时输出怎么办?如果未设置值,则可能很容易重写 SetParametersAsync[5] 并插入值,但有一种更简单的方法!

我们所要做的就是写出我们的默认值作为子组件标记的一部分,@attributes= 指令将使用使用者传递的任何值覆盖它们。因此,如果我们更改子组件以指定一些默认属性值,如下所示:

<div first="1" second="2" third="3" fourth="4"  @attributes=AllOtherAttributes>Right-click and inspect the HTML for this element to see the results!
</div>

然后我们可以像这样替换组件的那些默认值:

<ChildComponent first="consumer-value-1" second="consumer-value-2" />

这将呈现以下 HTML:

<div first="consumer-value-1" second="consumer-value-2" third="3" fourth="4">Right-click and inspect the HTML for this element to see the results!
</div>

我们的子组件将始终呈现其所有四个 HTML 属性,但也将允许使用者替换它们的值。

保护属性不被替换

在某些情况下,我们可能希望允许组件的使用者替换某些属性,但我们希望保护其他属性不被更改。例如:

<input class="form-control" type="number" @attributes=AllOtherAttributes />

在这个假设的 InputNumber 控件中,我们希望允许我们的使用者替换默认的 CSS 类属性,但不希望他们意外地将 typenumber 更改为 checkbox

在 Blazor 中,我们的 @attributes= 指令的位置很重要。指令之前的任何属性(在其上方或左侧)都可以由使用者替换其值,但在它之后(在其下方或右侧)的所有属性都受到保护,以免其值被替换。

鉴于以下标记:

<ChildComponentfirst="consumer-value-1"second="consumer-value-2"inserted="consumer-inserted-value" />

然后调整 @attributes= 在我们的 ChildComponent 中的位置将为我们提供以下输出:

// Example 1
<div@attributes=AllOtherAttributesfirst="1"second="2" />// Generated HTML
<divinserted="consumer-inserted-valuefirst="1"second="2" />
// Example 2
<divfirst="1"@attributes=AllOtherAttributessecond="2" />// Generated HTML
<divfirst="consumer-value-1"inserted="consumer-inserted-valuesecond="2" />
// Example 3
<divfirst="1"second="2"@attributes=AllOtherAttributes />// Generated HTML
<divfirst="consumer-value-1"second="consumer-value-2"inserted="consumer-inserted-value />

R.I.P. 默认值

记住哪些值优先的一种简单方法是使用“R.I.P.方法”。

@attributes= 指令将始终插入来自使用者的附加值,因此将 I 视为插入的含义。I 之前的每个属性值都可以替换(R),I 之后的每个属性值都受保护(P)。

<div first="1" second="2" @attributes=AllOtherAttributes third="3" fourth="4" />

8cb54dc11bc661f52ab30f645da62682.png

参考资料

[1]

源代码: https://blazor-university.com/components/replacing-attributes-on-child-components/

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

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

相关文章

HTTPS实现原理

HTTPS实现原理 HTTPS&#xff08;全称&#xff1a;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础是SSL。其所用的端口号是443。…

Android之在ubuntu上过滤多条关键字日志

1 问题 比如我们在查问题的时候,需要过滤多个关键字,我平时的做法是一个终端执行下面的命令,然后几个关键字就几个终端,切换来切换去不方便看日志 adb logcat | grep **** 2 改进办法 今天看到同事用了grep -E,我们可以通过-E这个参数过滤多个关键字,比如 adb logcat | gre…

C#使用ServiceController控制windows服务

C#中,使用ServiceController类控制windows服务,使用之前要先添加引用:System.ServiceProcess,然后在命名空间中引用:using System.ServiceProcess。下面举例获取本机的所有已安装的Windows服务和应用,然后查找某一应用活服务是否已经安装。 代码: using System; using S…

电信aep平台是什么意思_江苏天鼎证券:股票平台跳水是什么意思?股票为什么会跳水?...

相信很多新手在刚玩股票的时候会遇到很多的专业的基础知识不能理解&#xff0c;比如什么是跳水?为什么会跳水呢?接下来就为大家详细来说股票的跳水以及为何会跳水。一、股票平台跳水是什么意思?股票跳水通常指股价在较短的时间内&#xff0c;出现从高位下降到低位的现象。出…

设计模式六大原则(5):迪米特法则

设计模式六大原则&#xff08;5&#xff09;&#xff1a;迪米特法则 定义&#xff1a;一个对象应该对其他对象保持最少的了解。 问题由来&#xff1a;类与类之间的关系越密切&#xff0c;耦合度越大&#xff0c;当一个类发生改变时&#xff0c;对另一个类的影响也越大。 解决方…

Android之非root手机run-as命令获取debug版本apk里面的数据(shared_prefs文件,lib下面的so,数据库文件)

1 问题 非root手机想要获取debug版本的apk里面的数据(shared_prefs文件,lib下面的so,数据库文件) 2 直接用run-as命令 adb shellrun-as package-name 然后就直接进入当前apk目录了,比如 如下 /data/data/packageName 我们可以看到很多文件执行命令ls -al命令,显示结果如…

mysql mgr简介_MySQL Group Replication(MGR)使用简介与注意事项

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案&#xff0c;以插件形式提供。MGR基于分布式paxos协议&#xff0c;实现组复制&#xff0c;保证数据一致性。内置故障检测和自动选主功能&#xff0c;只要不是集群中的大多数节点都…

css改变谷歌浏览器的滚动条样式

详细内容请点击 /*---滚动条默认显示样式--*/::-webkit-scrollbar-thumb{height:50px;outline-offset:-2px;outline:2px solid #fff;-webkit-border-radius:4px;border: 2px solid #fff;}/*---鼠标点击滚动条显示样式--*/::-webkit-scrollbar-thumb:hover{height:50px;-webkit-…

C#创建PDF文档

说明:本实例用到了第三方组件ICSharpCode.SharpZipLib.dll、itextsharp.dll,该组件可到网上下载。 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text…

【矩阵乘法】OpenJ_POJ - C17F - A Simple Math Problem

算(74*sqrt(3))^n的整数部分&#xff08;mod 1e97&#xff09;。 容易想到矩乘快速幂&#xff0c;但是怎么算整数部分呢&#xff1f; (74*sqrt(3))^n一定可以写成ab*sqrt(3)&#xff0c;同理(7-4*sqrt(3))^n一定可以写成a-b*sqrt(3)&#xff0c;于是&#xff0c; (74*sqrt(3))^…

如果通过 C# 实现对象的深复制 ?

咨询区 NakedBrunch我想实现 引用类型对象 之间的深复制&#xff0c;也就是在新的对象上修改不会影响到老的对象&#xff0c;我用了 C# 提供的 Clone 方法。MyObject myObj GetMyObj(); // Create and fill a new object MyObject newObj myObj.Clone();但貌似这样行不通&…

centos安装与配置R语言

Linux下安装R语言 一、编译安装 由于采用编译安装&#xff0c;所以需要用到gcc编译环境&#xff0c;在编译前check文件时还会用到libXt-devel和readline-devel两个依赖&#xff0c;所以在编译R语言源码时先将这些工具和依赖包准备好。readline-devel 也可以不安装&#xff0c;不…

python beautifulsoup4 table tr_python BeautifulSoup解析表

牧羊人nacy这是通用的工作示例(表数据)标记。它返回带有内部列的行的列表。第一行仅接受一个(表头/数据)。def tableDataText(table): rows [] trs table.find_all(tr) headerow [td.get_text(stripTrue) for td in trs[0].find_all(th)] # header row i…

linux之让终端支持C++11/14编译cpp文件

1 问题 我们的项目很多智能指针,但是我linux的终端肯定不支持C11/14, 我们平时都是用的下面的命令编译c文件 g -g file.cpp -o file r 如果是用c11编译需要改成如下 g -g -Wall -stdc11 file.cpp -o file 如果是用C14编译需要改成如下 g -g -Wall -stdc14 file.cpp -o f…

clob字段怎么导出_Oracle 11g及12c+版本下为啥有些表不能exp导出?

【引言】今天有同事问了一个问题&#xff0c;在Oracle 11g下&#xff0c;为啥exp方式导出一个用户的数据表&#xff0c;在imp后却发现有些表并没有迁移过来。经查阅官方文档&#xff0c;发现和Oracle11g及12c 版本相对于10g&#xff0c;有一个新特性deferred_segment_creation(…

Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...

Python中&#xff0c;想要安装第三方安装包&#xff0c;即third library&#xff0c;package等&#xff0c;对于熟悉的人来说&#xff0c;很简单。但是对于新手&#xff0c;至少对于之前的我&#xff0c;很难&#xff0c;往往只是安装一个很小的包&#xff0c;都被搞得一头雾水…

C# 读写二进制文件

读写二进制文件的一种选择是直接使用流类型&#xff1b;在这种情况下&#xff0c;最好使用字节数组执行读写操作。另一个选择是使用为这个场景定义的读取器和写入器&#xff1a;BinaryReader和BinaryWriter。使用它们的方式类似于使用 StreamReader 和 StreamWriter&#xff0c…

推荐系统(1)--splitting approaches for context-aware recommendation

开篇语&#xff1a; 大一的时候。在实验室老师和师兄的带领下。我開始接触推荐系统。时光匆匆&#xff0c;转眼已是大三&#xff0c;因为大三课甚是少。于是便有了时间将自己所学的东西做下总结。第一篇博客。献给过去三年里带我飞的老师和师兄们&#xff0c;感谢你们的无私帮助…

C++之智能指针std::shared_ptr简单使用和理解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程 1 智能指针std::shared_ptr相关知识和如何使用 我们这里先说下智能指针std::shared_ptr,因为我看到我我们项目c++代码里面用得很多,我不是不会,所以记录学习下 先让ubu…

Excel只能输入不能修改

一、选择需要加密的单元格&#xff0c;右键→设置单元格格式→保护→锁定&#xff1b; 二、按AltF11键进入VBE环境&#xff0c;在左侧的相应sheet名称上&#xff08;如sheet1&#xff09;右键→查看代码&#xff1b; 三、选择Worksheet的SelectionChange事件&#xff0c;写入…