原文链接:https://blazor-university.com/components/capturing-unexpected-parameters/

捕获意外参数

源代码[1]

之前我们已经看到了如何使用特定名称声明参数和级联参数。例如,一个将 <img> 元素包装在一些自定义 HTML 中的自定义组件。

<div class="row"><img src=@src/>
</div>@code
{[Parameter]public string src { get; set; }
}

在代码稽核过程中,有人指出没有 alt 标签的图像对于视力障碍者来说不太容易访问,因此添加了另一个参数并更新了 HTML。

<div class="row" role="img" aria-label=@alt><img src=@src/>
</div>@code
{[Parameter]public string src { get; set; }[Parameter]public string alt { get; set; }
}

随着时间的推移,需要更多属性:

  • align

  • width

  • height

此时您可能不再对图像组件有额外的要求,但是每次编写组件时都必须为每个可能的属性编写参数可能会很烦人,尤其是当您实际上并不处理这些值而只是将它们传递给 HTML 元素的标记时。<input> 控件有大约 30 个属性,需要我们为其编写参数代码。

在没有编码参数的情况下捕获值

之前我们看到了如何利用属性展开[2]以编程方式生成 HTML 属性及其值。这涉及将 Dictionary<string, object> 的值分配给一个特别命名的 @attributes 属性。

在不匹配参数的情况下捕获属性值的工作方式类似。我们只需创建一个 Dictionary<string, object> 类型的属性,将其装饰为 [Parameter],但在 Parameter 中我们需要指定 CaptureUnmatchedValues = true

<div class="row" role="img" aria-label=@alt><img src=@src @attributes=AllOtherAttributes />
</div>@code
{[Parameter]public string src { get; set; }[Parameter]public string alt { get; set; }[Parameter(CaptureUnmatchedValues = true)]public Dictionary<string, object> AllOtherAttributes { get; set; }
}

现在,当您的组件的使用者使用 [Parameter] 修饰属性(正常行为)添加您未明确允许的属性值时,Blazor 不会抛出异常,而是将它们作为键/值对收集到我们的字典中。

在前面的示例中,我们组件的使用者指定的任何 attributes=value 分配都将添加到我们组件内的 <img> 元素中。

<MyCustomImage src="https://randomuser.me/api/portraits/lego/6.jpg" alt="A photo of Emmet" width=64 height=64 />

参考资料

[1]

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

Blazor University (10)组件 — 捕获意外参数相关推荐

  1. Blazor University (5)组件 — 字面量、表达式和指令

    原文链接:https://blazor-university.com/components/literals-expressions-and-directives/ 字面量.表达式和指令 源代码[1] ...

  2. [Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发

    通过一个小组件,熟悉 Blazor 服务端组件开发.github:https://github.com/git-net/NBlazors 一.环境搭建 vs2019 16.4, asp.net cor ...

  3. 将动态路由、布局和RouteViews添加到Blazor应用程序组件

    目录 概述 代码和示例 Blazor应用程序 应用组件 路由视图服务 路由视图管理器 动态布局 动态路由 自定义路由数据 更新RouteViewService RouteNotFoundManager ...

  4. 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值

    父组件向子组件传值 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  5. vue 如何将参数放到连接上_通过Vue路由传参的两种方式及Vue组件中接收参数的方式...

    1. Vue传参方式 1.1 通过动态路由传参 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那 ...

  6. Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误

    Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误 from:http://www.cprogramming.com/tutorial/ ...

  7. Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 <A Developer's Guide To Blazor Templated Components> [1] 在我之前的一篇 ...

  8. React 组件之间传递参数

    其实react组件之间传递参数是比较简单的,但是没有具体的使用过,组件之间传递参数是比较常见的事情,所以记录一下,防止以后自己在网上胡乱的翻找 最近做了一个商品的列表页面,我想通过点击修改能够实现商品 ...

  9. F5 配置手册 -F5 BIG-IP 10.1-2-配置-基本参数

    F5 配置手册 F5 BIG-IP 10.1-2-配置 -基本参数 统一沟通(中国)有限公司 2012-01-31 前言: 有人给我说,激活了接下来要做什么? 那么我们现在开始做激活后的事务. 但是请 ...

最新文章

  1. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法
  2. SharePoint 2013 开发——SharePoint Designer 2013工作流
  3. 花马云10亿无作为,被同事骂的当众落泪,后为阿里创造4500亿价值
  4. linux更改用户的shell,Linux下通过shell更改用户密码
  5. jquery validate验证方法
  6. 课程 预编译框架,开发高性能应用 - 微软技术暨生态大会 2018
  7. Atitit.词法分析的理论原理 part2
  8. 思科最模拟器Cisco Packet Tracer 7.3.0安装配置
  9. 远程计算机ip记录怎么删除吗,远程桌面连接清除登陆过的IP地址
  10. servlet运行html乱码,使用tomcat运行servlet时中文乱码的解决
  11. 银河帝国----基地
  12. Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm
  13. 《Introducing the Child Process Debugging Power Tool》学习
  14. mysql 查询分析器_mysql查询分析工具|mysql查询分析器(MySQL Query Browser)下载v1.1.20 官方版_ IT猫扑网...
  15. 查询mysql版本信息
  16. 1:基本初等函数的性质
  17. 单片机出现正在检测目标单片机问题解决办法
  18. VTK Spline 样条曲线
  19. 利用EL表达式替换回车符
  20. 华农OOAD期末复习整理资料

热门文章

  1. 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接
  2. 开放一些常见功能的工具类代码
  3. DDD:如何更好的使用值对象
  4. Linux 释放缓存的方法
  5. phpcms2008常用函数
  6. linux__ftp
  7. centos 关闭防火墙_CentOS7操作系统下如何关闭防火墙
  8. WPF DataGrid根据内容设置行颜色
  9. 白白的(baibaide)
  10. Java的接口、继承与多态