diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index b8e8ddfb57228f51bcfb29b584db259c2f4c254a..efa398f9c2d899a73622db8b04cb695abf7ca167 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 7.1.7-beta01 + 7.1.7 diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index cfc1cce90b9a1c7a243b4866cdbcf30ec84498f0..20738315d1316a99a643ea1fa21b5288e9f38ed4 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -92,6 +92,12 @@ public partial class Tab : IHandlerException, IDisposable [Parameter] public bool ShowClose { get; set; } + /// + /// 关闭标签页回调方法 + /// + [Parameter] + public Func? OnCloseTabItemAsync { get; set; } + /// /// 获得/设置 是否显示扩展功能按钮 默认为 false 不显示 /// @@ -379,14 +385,13 @@ public partial class Tab : IHandlerException, IDisposable /// /// 关闭当前标签页方法 /// - public Task CloseCurrentTab() + public async Task CloseCurrentTab() { var tab = _items.FirstOrDefault(t => t.IsActive); if (tab != null && tab.Closable) { - RemoveTab(tab); + await RemoveTab(tab); } - return Task.CompletedTask; } private void OnClickCloseAllTabs() => _items.RemoveAll(t => t.Closable); @@ -531,10 +536,14 @@ public partial class Tab : IHandlerException, IDisposable /// 移除 TabItem 方法 /// /// - public void RemoveTab(TabItem item) + public async Task RemoveTab(TabItem item) { var index = _items.IndexOf(item); _items.Remove(item); + if (OnCloseTabItemAsync != null) + { + await OnCloseTabItemAsync(item); + } var activeItem = _items.FirstOrDefault(i => i.IsActive); if (activeItem == null) { diff --git a/test/UnitTest/Components/TabTest.cs b/test/UnitTest/Components/TabTest.cs index 7448602fde1bad841d2f764fee917387ca117a4d..c8a4ae8911fb543f5f37745f74be7a78496a1d7d 100644 --- a/test/UnitTest/Components/TabTest.cs +++ b/test/UnitTest/Components/TabTest.cs @@ -77,11 +77,17 @@ public class TabTest : TabTestBase public void ClickTab_Ok() { var clicked = false; + TabItem? closedItem = null; var cut = Context.RenderComponent(pb => { pb.Add(a => a.ShowExtendButtons, true); pb.Add(a => a.Placement, Placement.Bottom); pb.Add(a => a.ShowClose, true); + pb.Add(a => a.OnCloseTabItemAsync, item => + { + closedItem = item; + return Task.CompletedTask; + }); pb.Add(a => a.OnClickTab, item => { clicked = true; @@ -121,8 +127,10 @@ public class TabTest : TabTestBase Assert.Equal("Tab2-Content", cut.Find(".tabs-body .d-none").InnerHtml); // Close + Assert.Null(closedItem); button = cut.Find(".tabs-item-close"); button.Click(); + Assert.NotNull(closedItem); } [Fact]