blazor - 如何将两种方式绑定到子组件中的选择 - Blazor
问题描述
我试图将两种方式绑定到子组件中的选择元素。Parent 应该能够更改 Child Select 的选定值,并且 Child Select 在更改时应该回调到 parent,以便它可以对新值做出反应。但是我似乎只能传递给孩子,而不是触发事件到父母。
我的父组件包含一个包含选择的子组件。父组件如下所示:
<SelectInput @bind-Value="Selected">
@ChildContent
</SelectInput>
@code{
[Parameter]
public string Selected { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
[Parameter]
public EventCallback<string> SelectedChanged { get; set; }
private async Task ValueChanged(string val)
{
await SelectedChanged.InvokeAsync(val);
}
}
ValueChanged 和 SelectedChanged 都没有被调用。这是我想解决的问题。
子组件是 SelectInput 组件:
<select value="@Value"
@onchange="OnValueChanged">
@ChildContent
</select>
@code{
[Parameter]
public string Value { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
public async Task OnValueChanged(ChangeEventArgs e)
{
Value = e.Value.ToString();
await ValueChanged.InvokeAsync(Value);
}
}
此子元素正在工作并正在调用 ValueChanged 回调。但是我无法在父级中捕获回调,因为它已经被编译代码调用,因为绑定值(我需要它,因为它也可以在这个父控件之外更改。再次向下绑定正在工作,但是我也需要绑定在这种情况下向上 - 或者至少捕捉事件并将其向上传播。任何帮助将不胜感激:)
解决方案
注意:不应改变参数属性。它们仅用于在组件之间流动数据。为简单起见,我忽略了这一点。
祖父母
@page "/"
Type a value USA ,France,etc.:
<input type="text" @bind="Selected" @bind:event="oninput" />
<ParentComponent @bind-Value="Selected"></ParentComponent>
@code{
private string Selected { get; set; } = "Germany";
}
父组件.razor
<SelectInput @bind-Value="Value"></SelectInput>
@code{
private string _value;
[Parameter]
public string Value
{
get => _value;
set
{
if(_value != value)
{
_value = value;
_ = ValueChanged.InvokeAsync(_value);
}
}
}
[Parameter]
public EventCallback<string> ValueChanged { get; set; }
}
选择输入.razor
<select value="@Value" @onchange="OnValueChanged">
<option value="USA">USA</option>
<option value="France">France</option>
<option value="China">China</option>
<option value="Germany">Germany</option>
</select>
@code{
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback<string> ValueChanged { get; set; }
public async Task OnValueChanged(ChangeEventArgs e)
{
Value = e.Value.ToString();
await ValueChanged.InvokeAsync(Value);
}
}
推荐阅读
- python - python相当于matlab代码生成数据文件
- python - ModuleNotFoundError:没有名为“hijri_converter”的模块
- javascript - 如何刷新已经初始化的切换复选框?
- node.js - npm安装栏在vscode中有多行
- jquery - Shopify AJAX 请求在 Theme Customizer 中返回 404,但在前端返回 200
- stata - 将 Cox Proportional Hazards 的输出合并到一张表中
- javascript - 为什么我不能调用动作来调度?
- reactjs - 使用地图数据的无线电组未从其自己的组中选择
- javascript - 如何轮流在javascript中推送数组?
- sql - Postgres 递归查询和窗口函数从表中生成树