在Blazor中,使用输入时,
<input bind-value="@InputValue" bind-value:event="oninput"/>这将创建一个使用oninput事件更新的双向绑定。
我想在一个具有自定义事件和自定义属性的自定义组件上重新创建这个函数。
CustomInput.razor
<input value="@Value" oninput="@OnInput" />
@code {
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback<ChangeEventArgs> OnInput { get; set; }
}我想用这种方式使用它。
<CustomInput bind-Value="@InputValue" bind-Value:event="OnInput" />现在有可能在布兹尔身上吗?如果是,我怎样才能做到?
编辑:
对于任何遇到这种情况的人来说,这似乎都是有效的。我不确定这个特性是在问题提出后添加的,还是一直都是这样工作的,但是上面的代码应该可以按原样工作。通常情况下,您的事件名应该是ValueChanged,但是如果您有理由使用另一个事件名,比如在有OnInput和OnChange的输入中,那么您可以使用这种格式。
发布于 2021-01-24 20:03:24
是的,Blazor支持双向绑定。它与EventCallbacks (必须触发)一起工作,默认使用基于名称约定的事件,例如:{PropertyName}Changed。此外,您还可以重写此命名约定@bind-{Prop}:event="{EventCallbackName}"。在您的代码示例中,您只是重写这个默认事件名,而不是触发它。
在您的代码中有两个问题:
@开始,在""内部,没有必要对is:@bind-{PropertyName}="{variable}"使用@更正。将代码更改为:<CustomInput @bind-Value="InputValue" @bind-Value:event="OnInput" />
private string _value;
[Parameter] public string Value
{
get => _value;
set
{
if(value == _value)
return;
_value = value;
if(OnInput.HasDelegate)
{
OnInput.InvokeAsync(_value);
}
}
}发布于 2019-11-22 07:24:10
事件参数必须被称为ValueChanged。
<input value="@Value" @oninput="ValueChanged" />
@code {
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback<ChangeEventArgs> ValueChanged { get; set; }
}读取组件参数绑定
发布于 2022-09-25 13:12:10
只需在输入中使用@bind属性即可!
<input @bind="myProperty" />
@code{
private string? myProperty;
}参考资料:ASP.NET核心Blazor数据绑定
https://stackoverflow.com/questions/58988952
复制相似问题