更新 绑定数据_Blazor 修仙之旅 组件与数据绑定

一.前言

在第一篇文章初尝 Blazor WebAssembly中,有提到过组件(Component)这个概念。组件在 Blazor 中是必不可少的,UI 全靠它组装起来,和前端的 JS 组件是一个意思,比如:vue component、react component 等等。借用官方文档的描述:

Blazor 应用是使用组件构建的。组件是自包含的用户界面 (UI) 块,例如页、对话框或窗体。组件包含插入数据或响应 UI 事件所需的 HTML Tag和处理逻辑。组件非常灵活且轻量。可在项目之间嵌套、重复使用和共享。

二.组件

组件一般以 .razor 为文件名后缀,且组件名必须以大写字母开头(猜测可能是和VUE里的命名限制一样,表面和Html标签名重复)。

我们新建的项目,Shared 文件夹中就有三个组件:

e5ba1891f3c891e730fce6b977a5e7d1.png

左侧导航菜单组件:

6acb39a2687b82a713b08cdaae505fca.png

在主布局组件中应用了导航菜单组件:

bf20776f04c3f33273b93385ff9ca8fa.png

更多关于组件的资料请查阅官方文档:创建和使用 ASP.NET Core Razor 组件

三.数据绑定

1.介绍

Razor 组件通过名为 @bind 的HTML元素属性提供数据绑定功能,这个绑定是双向的。

@bind  是区分大小写的,例如:@BIND@Bind 都是错误的,下面写了一个例子,将 CurrentValue 绑定到两个文本框中。



变 更


@code
{
public int CurrentValue { get; set; } = 0;

private void ChangeValue()
{
CurrentValue ++;
}
}

需要注意的是在文本框的绑定中,仅当呈现组件时,UI才会更新文本框,而不响应于更改属性的值。由于组件是在事件处理程序代码执行后呈现的,因此属性更新通常在触发事件处理程序后立即反映在UI中。

@bind="CurrentValue" 等同于以下代码:

    @onchange="@((ChangeEventArgs __e) => CurrentValue =
__e.Value.ToString())" />

@code {
public int CurrentValue { get; set; } = 0;
}

6f5357b7480e2674617ccf71ec6a83df.gif

点击按钮,变更了值,也会应用到文本框中:

07dfa34fbdbc76171b39eeba06a4a5de.gif

2.变更绑定事件

上面小节中,默认绑定了 onchange 事件,只有文本框失去焦点才会触发,体验不是很好,那么可不可以在输入的时候就同步更新值呢,当然是可以的,解决方案就是变更绑定事件为 oninput,通过设置@bind:event属性来变更绑定事件:



718a2d64326edb2711bcb802fa72c6fc.gif

3.输入错误的值

我们设置的 CurrentValue 的类型是 int ,如果我们输入字母,那么字母将不会被接受,同时值会恢复到输入前的正确值。

4.子父组件数据传递

在 vue、react 等 js 中,都有子父组件传值概念,Blazor 也不例外。

(1)父传子

新建一个子组件命名为 ChildComponent

子组件



Year:


@code {
[Parameter]
public int Year { get; set; }

[Parameter]
public EventCallback YearChanged { get; set; }
}

定义一个 Year 属性和 EventCallback 类型的属性 YearChanged

新建一个父组件命名为ParentComponent

父组件



ParentYear:




@code {
[Parameter]
public int ParentYear { get; set; } = 1978;
}

在页面中引用父组件:

5b36398cbf32ec01e01046b3e586115d.png

YearChanged 是一个约定命名,不能更改,更改将会报错:

993304bc31166e962b0be0f2cafa92ef.png

EventCallback 用于子父组件嵌套时公开事件,比如 YearChanged 就公开了子组件 Year 属性的 changed 事件。父组件里,通过 @bind-Year 来绑定 Year 的 changed 事件,然后将父组件 ParentYear 的值传递过去,达成父级组件向子级组件传递值。

等同于 ,如果使用后者,那么事件命名将不会受约定命名限制。

运行效果:

62d90cae4c130e7ee5674ef468f084ef.gif

(2)子传父(链式绑定)

子传父,无法直接通过 @bind 来实现,需要单独指定事件处理程序和值,我们更改上面的子组件,定义一个 OnYearChanged 事件,并将其绑定到文本框的 oninput 事件,在事件里手动更新了 Year的值,并调用 YearChanged 来进行传递。

子组件



Year:


@code {
[Parameter]
public int Year { get; set; }

[Parameter]
public EventCallback YearChanged { get; set; }
private Task OnYearChanged(ChangeEventArgs e)
{
Year = int.Parse(e.Value.ToString());
return YearChanged.InvokeAsync(Year);
}
}

运行:

c710968d31054922eb9428c507bbe083.gif

四.资料

  • 本文Demo:https://github.com/stulzq/BlogDemos/tree/master/Blazor/Component%20and%20Data%20Binding

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

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

相关文章

关于使用idea工具debug时,断点颜色由红色变成灰色解决方法

在使用断点调试的时候,发现断点由原来的红色变成灰色的,后来发现是由于错误操作将Debug断点调试禁用了 ,只需要点击禁用按钮取消就可以了

改变图标颜色_LOL设计师宣布修改装备图标:提高清晰度、颜色差异化

在11月12日,英雄联盟更新到了最新的季前赛版本。这次官方除了对部分英雄进行改动,主要是对于装备的图标和属性进行了更新。而在图标更新后,很多装备的样子都发生了很大的变化。这也导致很多老玩家在进游戏后,看着装备栏发呆&#…

虚拟机中centos安装gcc

yum install gcc-c 一、首先是:使得虚拟机联网 使用NAT模式 虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8。 虚拟机设置里面——网络适配器,网络连接选择NAT模式。 虚拟机菜单栏—编辑—虚拟网络编辑器,选择Vmnet8 NAT模式…

gcd(欧几里得算法)

基础 1 int gcd(int a,int b) 2 { 3 int r; 4 while(b>0) 5 { 6 ra%b; 7 ab; 8 br; 9 } 10 return a; 11 } View Code递归 1 int gcd(int a,int b) 2 { 3 return (b>0)?gcd(b,a%b):a; 4 } Vi…

网络摄像头sdk_SenseDLC嵌入式人像识别SDK 安防边缘的“小巨人”

随着这些年将人工智能技术赋能行业的不断深入,商汤科技对智慧城市建设有着更深的理解。通过不断实践发现,很多区域由于摄像头数量和布置等问题较难有效做到清晰的人脸抓拍,且单一的人脸识别会遇到诸多干扰,比如发型、胖瘦、年纪、…

使用最大似然法来求解线性模型(1)

在Coursera机器学习课程中,第一篇练习就是如何使用最小均方差(Least Square)来求解线性模型中的参数。本文从概率论的角度---最大化似然函数,来求解模型参数,得到线性模型。本文内容来源于:《A First Course of Machine Learning》…

.net aspose.words 域加载图片_使用Python批量替换csdn文章的图片链接

欢迎大家关注我的微信公众号“IT工匠”获取更多资源(涉及算法、数据结构、java、深度学习、计算机网络、python、Android等互联网技术资料)。前言笔者之前的写作习惯一直是在本地(MacTyporaIpac)写好之后将markdown代码粘贴到csdn,图片是Ipac自动上传到微博匿名图床…

基恩士上位机链路通讯_基恩士PLC通讯源码

基恩士PLC KV7000,8000还是比较好用的,那如何和上位机通讯,我把源码写出来了。采用上位链路通讯,基恩士官方给我们留了8501端口,这个端口有意思刚好是我生日。基恩士的资料我觉得做的特别好,能快速写源代码得益于官方资料特别详细…

fastq质量值_fastq 数据格式解析

概念介绍Read 读段Read 中文翻译: 读段,来自测序仪的raw data一个Read 可能由多个片段组成, Read的索引是测序时的顺序Sequencing quality 测序质量测序仪在测序的时候,每次测出来的结果可能都不一样(仪器误差 序列长度等各方面因…

画像分析(3-3)标签建模-模型管理-新建关系

1、关系是什么 关系,是实体与实体之间所发生的连接,通常表示某一种行为/一个事实,如成交、搜索、出行。从数据表的角度来看,这样的表通常被称为”事实表“,往往是有多个联合主键(或是说都是外键&#xff09…

二进制、八进制、十进制、十六进制之间的转换

在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。 对于进制,有两个基本的概念:基数和运算规则。 基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进…

【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)

2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2457 Solved: 859Description a180285非常喜欢滑雪。他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景…

SortedMap接口实现排序

SortedMap接口主要提供有序的Map实现。SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类,TreeMap也是此接口的一个子类 Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap。 TreeMap实现了SortedMap接口&#xf…

mysql漏洞包_MySQL npm包中的本地文件泄露漏洞

“A pure node.js javascript Client implementing the MySQL protocol.”漏洞在某次安全评估中,Synacktiv专家无意中发现某个应用可以从另一台MySQL服务器中读取敏感数据,而该应用程序正是使用了mysql的npm软件包。该npm软件包所支持的LOAD DATA LOCAL命…

java实现MD5加密

MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上。那么它到底有什么,又什么好处呢,会被这么广泛的运用在应用开发中。 信息-摘要算法(Message-digest Algorithm 5,MD5)于90年代初由MIT …