简短版本
@bind
是对@bind-value
的覆盖,事件设置为 "onchange"。
这两个命令是等价的:
... @bind-value="userName" @bind-value:event="onchange" ...
... @bind="userName" ...
长版
@bind
属性完成了两个单独但相关的任务:
- 将表达式绑定到
<Input...
组件的值上。
- 绑定一个委托,该委托将触发组件的
ValueChanged
属性。
这两者都是必需的。 @bind-Value
的实现如下:
... @bind-value="userName" @bind-value:event="onchange" ...
我们正在设置表达式(="userName"
)和委托(="onchange"
)。
"更简单的" @bind=
只是一个预设委托为 "onchange" 的覆盖。所以这两个命令在功能上是相同的:
... @bind-value="userName" @bind-value:event="onchange" ...
... @bind="userName" ...
使用覆盖方法的大大简化的类比:
public void bind-value(string value, string event)
{..}
public void bind(string value)
{
bind-value(value, "onchange");
}
使用完整的@bind-value
版本的几个常见用例是:
- 在用户输入时更新UI
- 在用户输入时验证电子邮件地址
记住,当组件失去焦点时,onchange
事件只会触发PropertyChanged
。相反,我们希望PropertyChanged
通过oninput
事件触发:
... @bind-value="H1Content" @bind-value:event="oninput" ...
... @bind-value="email" @bind-value:event="oninput" ...
@bind-value="userName"
也会默认使用onchange
。这两者没有区别。 - Konrad