【发布时间】:2021-01-27 03:23:43
【问题描述】:
考虑以下要求:
- 一个页面有tabs。
- 每个选项卡都有一个 Blazor 组件(即选项卡正文)以在单击时显示。
- 一些标签正文在初始化时运行
OnInitializedAsync。 - 用户可以在选项卡之间切换以显示不同的选项卡正文。
但这就是挑战所在:
- 用户单击一个选项卡,切换到另一个选项卡,然后切换回他们单击的第一个选项卡。
- (例如,用户单击第一个选项卡,然后切换到第二个选项卡,然后再次返回到第一个选项卡。)
- 标签正文在重新出现时不应被初始化两次。 (它不应运行
OnInitializedAsync两次)。
这在 blazor 中怎么可能?
建议的解决方案:使用@if 来决定是否应该呈现每个选项卡
代码:
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" @onclick="() => tabId == 1">Tab 1</a>
</li>
<li class="nav-item">
<a class="nav-link" @onclick="() => tabId == 2">Tab 2</a>
</li>
<li class="nav-item">
<a class="nav-link" @onclick="() => tabId == 3">Tab 3</a>
</li>
</ul>
@switch(tabId)
{
case 1:
<Tab1Component />
break;
case 2:
<Tab2Component />
break;
case 3:
<Tab3Component />
break;
}
@code {
private int tabId = 1;
}
但这不起作用,因为当我切换标签时,OnInitializedAsync 每次都会被调用。
如果有一个 hidden blazor 属性会很有帮助,我可以像这样向标签正文添加一个属性:
<Tab1Component @hidden="tabId != 1" />
【问题讨论】: