Skip to content

Commit e3d9af2

Browse files
committed
refactor: 微调逻辑
1 parent 4711ec0 commit e3d9af2

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/BootstrapBlazor/Components/Checkbox/Checkbox.razor.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,35 +157,44 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
157157
/// <inheritdoc/>
158158
/// </summary>
159159
/// <returns></returns>
160-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(TriggerClick));
160+
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(OnTriggerClickAsync));
161161

162-
private CheckboxState NextState => State == CheckboxState.Checked ? CheckboxState.UnChecked : CheckboxState.Checked;
162+
/// <summary>
163+
/// 触发 Click 方法
164+
/// </summary>
165+
/// <returns></returns>
166+
public async Task TriggerClick() => await OnTriggerClickAsync();
163167

164168
/// <summary>
165169
/// 触发 Click 方法 由 JavaScript 调用
166170
/// </summary>
167171
/// <returns></returns>
168172
[JSInvokable]
169-
public async ValueTask<bool> TriggerClick(string? state)
173+
public async ValueTask<bool> OnTriggerClickAsync(string? state = null)
170174
{
171-
// state 为 null 时表示 Click 事件触发;不为 null 时表示 JavaScript 调用同步状态
175+
// 本组件由于支持 OnBeforeStateChanged 回调方法,所以设计上移除了 onclick 事件,改为通过 JS 调用 TriggerClick 方法
172176
// state 值 1 表示 Checked 状态,0 表示 UnChecked 状态
177+
178+
// state 有值时表示同步状态功能
173179
if (!string.IsNullOrEmpty(state))
174180
{
175181
State = state == "1" ? CheckboxState.UnChecked : CheckboxState.Checked;
176182
return true;
177183
}
178184

185+
// 调用 OnBeforeStateChanged 回调方法查看是否阻止状态改变
186+
// 返回 true 时改变状态,返回 false 时不改变状态阻止状态改变 preventDefault
187+
var val = State == CheckboxState.Checked ? CheckboxState.UnChecked : CheckboxState.Checked;
179188
if (OnBeforeStateChanged != null)
180189
{
181-
var ret = await OnBeforeStateChanged(NextState);
190+
var ret = await OnBeforeStateChanged(val);
182191
if (ret == false)
183192
{
184193
return false;
185194
}
186195
}
187196

188-
var render = await InternalStateChanged(NextState);
197+
var render = await InternalStateChanged(val);
189198
if (render)
190199
{
191200
StateHasChanged();

0 commit comments

Comments
 (0)