Skip to content

Commit 1082672

Browse files
authored
fix(AutoComplete): support bind value clear value function (#6936)
* refactor: 增加 Clear 方法用于触发双向绑定 * doc: 更新示例 * test: 增加单元测试
1 parent 21ace9f commit 1082672

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

src/BootstrapBlazor.Server/Components/Samples/AutoCompletes.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<section ignore>@((MarkupString)Localizer["ShowLabelDescription"].Value)</section>
3838
<Divider Text="@Localizer["Divider1Text"]" Alignment="Alignment.Left" style="margin: 2rem 0;"></Divider>
3939
<ValidateForm Model="@Model">
40-
<AutoComplete Items="@StaticItems" @bind-Value="@Model.Name" ShowLabel="true" />
40+
<AutoComplete Items="@StaticItems" @bind-Value="@Model.Name" ShowLabel="true" IsClearable="true" />
4141
</ValidateForm>
4242
<Divider Text="@Localizer["Divider2Text"]" Alignment="Alignment.Left" style="margin: 2rem 0;" />
4343
<AutoComplete Items="@StaticItems" @bind-Value="@Model.Name" ShowLabel="false" />

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,19 @@ private async Task OnClickItem(string val)
192192

193193
private List<string> Rows => _filterItems ?? [.. Items];
194194

195+
/// <summary>
196+
/// 点击清空按钮时调用此方法 由 Javascript 触发
197+
/// </summary>
198+
/// <returns></returns>
199+
[JSInvokable]
200+
public async Task TriggerClear()
201+
{
202+
await TriggerFilter("");
203+
204+
_clientValue = null;
205+
CurrentValueAsString = string.Empty;
206+
}
207+
195208
/// <summary>
196209
/// TriggerFilter method
197210
/// </summary>
@@ -228,12 +241,10 @@ public async Task TriggerFilter(string val)
228241
/// <param name="v"></param>
229242
/// <returns></returns>
230243
[JSInvokable]
231-
public Task TriggerChange(string v)
244+
public void TriggerChange(string v)
232245
{
233246
_clientValue = v;
234247
CurrentValueAsString = v;
235-
236-
return Task.CompletedTask;
237248
}
238249

239250
private List<string> GetFilterItemsByValue(string val)

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export function init(id, invoke, value, changedEventCallback) {
143143

144144
EventHandler.on(el, 'click', '.clear-icon', e => {
145145
input.value = '';
146-
invoke.invokeMethodAsync('TriggerFilter', '');
146+
invoke.invokeMethodAsync('TriggerClear');
147147
});
148148
}
149149

test/UnitTest/Components/AutoCompleteTest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,27 @@ public async Task IgnoreCase_Ok()
196196
Assert.Equal(2, menus.Count);
197197
}
198198

199+
[Fact]
200+
public async Task TriggerClear_Ok()
201+
{
202+
var val = "task1";
203+
var items = new List<string>() { "task1", "Task2" };
204+
var cut = Context.RenderComponent<AutoComplete>(builder =>
205+
{
206+
builder.Add(a => a.Items, items);
207+
builder.Add(a => a.IgnoreCase, false);
208+
builder.Add(a => a.Value, val);
209+
builder.Add(a => a.IsClearable, true);
210+
builder.Add(a => a.ValueChanged, EventCallback.Factory.Create<string?>(this, v =>
211+
{
212+
val = v;
213+
}));
214+
});
215+
216+
await cut.InvokeAsync(cut.Instance.TriggerClear);
217+
Assert.Empty(val);
218+
}
219+
199220
[Fact]
200221
public async Task DisplayCount_Ok()
201222
{

0 commit comments

Comments
 (0)