File tree Expand file tree Collapse file tree 9 files changed +51
-81
lines changed
BootstrapBlazor.Server/Components/Pages Expand file tree Collapse file tree 9 files changed +51
-81
lines changed Original file line number Diff line number Diff line change 44<div class =" coms-search" >
55 <div class =" row" >
66 <div class =" col-12" >
7- <Search @bind-Value =" @SearchText" PlaceHolder =" @Localizer[" Search " ]" OnSearch =" @OnSearch" ShowClearButton =" true" ></Search >
7+ <Search @bind-Value =" @SearchText" PlaceHolder =" @Localizer[" Search " ]"
8+ OnSearch =" @OnSearch" OnClear =" OnClear" ShowClearButton =" true" ></Search >
89 </div >
910 </div >
1011 <div class =" coms-search-filter" >
Original file line number Diff line number Diff line change @@ -19,4 +19,11 @@ public sealed partial class Coms
1919 SearchText = searchText ;
2020 return Task . FromResult < IEnumerable < string ? > > ( ComponentItems . Where ( i => i . Contains ( searchText , StringComparison . OrdinalIgnoreCase ) ) . ToList ( ) ) ;
2121 }
22+
23+ private Task OnClear ( string searchText )
24+ {
25+ SearchText = "" ;
26+ StateHasChanged ( ) ;
27+ return Task . CompletedTask ;
28+ }
2229}
Original file line number Diff line number Diff line change 11<Project Sdk =" Microsoft.NET.Sdk.Razor" >
22
33 <PropertyGroup >
4- <Version >9.4.9-beta01 </Version >
4+ <Version >9.4.9-beta02 </Version >
55 </PropertyGroup >
66
77 <ItemGroup >
Original file line number Diff line number Diff line change 1616 placeholder =" @PlaceHolder" disabled =" @Disabled" @ref =" FocusElement" />
1717 <span class =" form-select-append" ><i class =" @Icon" ></i ></span >
1818 <span class =" form-select-append ac-loading" ><i class =" @LoadingIcon" ></i ></span >
19- <RenderTemplate ChildContent =" RenderItems" ></RenderTemplate >
19+ <RenderTemplate @ref =" _dropdown" >
20+ @RenderDropdown
21+ </RenderTemplate >
2022</div >
2123
2224@code {
Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ public partial class AutoComplete
9090 private List < string > ? _filterItems ;
9191
9292 [ NotNull ]
93- private AutoCompleteItems ? _dropdown = default ;
93+ private RenderTemplate ? _dropdown = default ;
9494
9595 /// <summary>
9696 /// <inheritdoc/>
@@ -187,15 +187,7 @@ public override Task TriggerChange(string val)
187187 StateHasChanged ( ) ;
188188 }
189189 _render = true ;
190- _dropdown . RenderContent ( ) ;
190+ _dropdown . Render ( ) ;
191191 return Task . CompletedTask ;
192192 }
193-
194- private RenderFragment RenderItems => builder =>
195- {
196- builder . OpenComponent < AutoCompleteItems > ( 0 ) ;
197- builder . AddAttribute ( 10 , "ChildContent" , RenderDropdown ) ;
198- builder . AddComponentReferenceCapture ( 20 , dropdown => _dropdown = ( AutoCompleteItems ) dropdown ) ;
199- builder . CloseComponent ( ) ;
200- } ;
201193}
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 66namespace BootstrapBlazor . Components ;
77
88/// <summary>
9- /// RenderTemplate 组件
9+ /// RenderTemplate component
1010/// </summary>
1111public partial class RenderTemplate
1212{
1313 /// <summary>
14- /// 获得/设置 子组件
14+ /// Gets or sets the child component
1515 /// </summary>
1616 [ Parameter ]
1717 public RenderFragment ? ChildContent { get ; set ; }
1818
1919 /// <summary>
20- /// 获得/设置 首次加载回调委托
20+ /// Gets or sets the callback delegate for the first load
2121 /// </summary>
2222 [ Parameter ]
2323 public Func < bool , Task > ? OnRenderAsync { get ; set ; }
@@ -36,4 +36,12 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
3636 await OnRenderAsync ( firstRender ) ;
3737 }
3838 }
39+
40+ /// <summary>
41+ /// Render method
42+ /// </summary>
43+ public void Render ( )
44+ {
45+ StateHasChanged ( ) ;
46+ }
3947}
Original file line number Diff line number Diff line change 5555 <Button Color =" SearchButtonColor" Text =" @SearchButtonText" Icon =" @ButtonIcon" OnClick =" OnSearchClick" aria-label =" Search" ></Button >
5656 }
5757 </div >
58- <ul class =" dropdown-menu" >
58+ <RenderTemplate @ref =" _dropdown" >
59+ @RenderDropdown
60+ </RenderTemplate >
61+ </div >
62+
63+ @code {
64+ RenderFragment RenderDropdown =>
65+ @< ul class = " dropdown-menu" >
5966 @foreach (var item in _filterItems )
6067 {
6168 < li class = " dropdown-item" @onclick = " () => OnClickItem(item)" >
7380 {
7481 < li class = " dropdown-item" > @NoDataTip < / li >
7582 }
76- </ul >
77- </ div >
83+ < / ul > ;
84+ }
Original file line number Diff line number Diff line change @@ -171,6 +171,9 @@ public partial class Search<TValue>
171171
172172 private SearchContext < TValue > _context = default ! ;
173173
174+ [ NotNull ]
175+ private RenderTemplate ? _dropdown = default ;
176+
174177 /// <summary>
175178 /// <inheritdoc/>
176179 /// </summary>
@@ -205,6 +208,14 @@ protected override void OnParametersSet()
205208 }
206209 }
207210
211+ private bool _render = true ;
212+
213+ /// <summary>
214+ /// <inheritdoc/>
215+ /// </summary>
216+ /// <returns></returns>
217+ protected override bool ShouldRender ( ) => _render ;
218+
208219 private string _displayText = "" ;
209220 /// <summary>
210221 /// 点击搜索按钮时触发此方法
@@ -218,7 +229,7 @@ private async Task OnSearchClick()
218229 await Task . Yield ( ) ;
219230
220231 var items = await OnSearch ( _displayText ) ;
221- _filterItems = items . ToList ( ) ;
232+ _filterItems = [ .. items ] ;
222233 ButtonIcon = SearchButtonIcon ;
223234 if ( IsTriggerSearchByInput == false )
224235 {
@@ -280,11 +291,13 @@ private async Task OnClickItem(TValue val)
280291 [ JSInvokable ]
281292 public override async Task TriggerChange ( string val )
282293 {
294+ _render = false ;
283295 _displayText = val ;
284-
285296 if ( IsTriggerSearchByInput )
286297 {
287298 await OnSearchClick ( ) ;
288299 }
300+ _render = true ;
301+ _dropdown . Render ( ) ;
289302 }
290303}
You can’t perform that action at this time.
0 commit comments