Hoje veremos como criar sub-menus de navegação no Blazor. |
Se você esta chegando agora e não sabe o que é o Blazor leia o artigo ASP .NET Core - Iniciando com o Blazor - Macoratti; se você já conhece e quer saber mais pode fazer o curso de Blazor Essencial.
Vamos aprender como criar sub-menus e outros recursos em aplicações Blazor.
Recursos usados:
Criando o projeto Blazor (Cliente side) no VS Community 2019
Abra o VS 2019 Community (versão mínima 16.5) e selecione a opção Create a New Project;
A seguir selecione a opção Blazor app e clique em next;
Informe o nome do projeto : Blazor_Submenu1, a localização e clique em Create;
A seguir teremos uma janela com duas opções :
Para o nosso projeto qualquer uma das opções de projeto vai funcionar.
Selecione a segunda opção - Blazor Server App e clique no botão Create.
Com o projeto criado vamos abrir o componente NavMenu.razor na pasta Shared que contém a definição dos links dos menus da aplicação.
Vamos criar um novo item de menu como um link para um menu Gráficos e no seu interior dois links: um para gráfico de barras e outro para gráfico de pizza.
Para isso inclua o código em destacado em azul conforme abaixo:
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Blazor_Submenu1</a>
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
</NavLink>
</li>
<li class="nav-item px-3"> <NavLink class="nav-link" href="" @onclick="()=> expandirSubMenu =! expandirSubMenu"> <span class="oi oi-graph" aria-hidden="true"></span> Gráficos </NavLink> @if(expandirSubMenu) { <NavLink class="expand-menu" href=""> <span class="oi oi-bar-chart" aria-hidden="true"></span> Barras </NavLink> <NavLink class="expand-menu" href=""> <span class="oi oi-pie-chart" aria-hidden="true"></span> Pizza </NavLink> } </li> </ul> </div> @code {
private bool collapseNavMenu = true;
private bool expandirSubMenu;
private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
|
Vamos entender o código:
1- Criamos a variável expandirSubMenu do tipo booleana na seção de código do arquivo:
private bool expandirSubMenu;
2- Criamos um novo item de menu, o link Gráficos
<NavLink class="nav-link" href="" @onclick="()=>
expandirSubMenu =! expandirSubMenu">
<span class="oi oi-graph" aria-hidden="true"></span>
Gráficos
</NavLink>
Neste link definimos um evento onclick que vai permitir expandir e retrair os submenus:
3- No interior deste link criamos dois links : Barras e Pizza dentro de um comando if que verifica o valor da variável expandirSubMenu para expandir/retrair os submenus
@if(expandirSubMenu)
{
<NavLink class="expand-menu" href="">
<span class="oi oi-bar-chart" aria-hidden="true"></span>
Barras
</NavLink>
<NavLink class="expand-menu" href="">
<span class="oi oi-pie-chart" aria-hidden="true"></span>
Pizza
</NavLink>
}
Tudo isso esta envolvido por uma tag <li class="nav-item px-3"></liv>.
Executando o projeto teremos o resultado a seguir:
Vamos agora alterar o código para criar o submenu dentro do menu Gráfico.
Altere o código do arquivo NavMenu.razor conforme abaixo:
...
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="" @onclick="()=> expandirSubMenu =! expandirSubMenu">
<span class="oi oi-graph" aria-hidden="true"></span> Gráficos
</NavLink>
@if (expandirSubMenu)
{
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="expand-menu" href="">
<span class="oi oi-bar-chart" aria-hidden="true"></span> Barras
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="expand-menu" href="">
<span class="oi oi-pie-chart" aria-hidden="true"></span> Pizza
</NavLink>
</li>
</ul>
}
</li>
</ul>
</div>
...
|
Aqui a alteração feita incluiu os
dois submenus, Barras e
Pizza, dentro de uma tag
<ul class="nav flex-column"></ul> on
.
Executando o projeto agora teremos o resultado abaixo:
Apenas para ilustrar podemos criar um componenente Graficos.razor na pasta Pages e definir os links dos menus para este componente:
@page "/graficos"
@page "/graficos/barra"
@page "/graficos/pizza"
<h3>Graficos de Barras e/ou Pizza</h3>
@code {
}
|
E no arquivo NavMenu.razor vamos incluir as rotas definidas na tage href:
...
<li class="nav-item px-3">
<NavLink class="nav-link" href="graficos" @onclick="()=> expandirSubMenu =! expandirSubMenu">
<span class="oi oi-graph" aria-hidden="true"></span> Gráficos
</NavLink>
@if (expandirSubMenu)
{
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="expand-menu" href="graficos/barra">
<span class="oi oi-bar-chart" aria-hidden="true"></span> Barras
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="expand-menu" href="graficos/pizza">
<span class="oi oi-pie-chart" aria-hidden="true"></span> Pizza
</NavLink>
</li>
</ul>
}
</li>
...
|
O resultado da execução do projeto agora mostra os links acionando o componente Graficos:
Pegue o código do projeto aqui: Blazor_Submenu1.zip (sem as referências)
"E nós conhecemos, e cremos no
amor que Deus nos tem. Deus é amor; e quem está em amor
está em Deus, e Deus nele."
1 João 4:16
Referências:
ASP .NET Core - Criando uma aplicação com Angular 2 - Macoratti.net
ASP .NET Core - Criando uma aplicação Web no ... - Macoratti.net
ASP .NET Core - Iniciando com o Blazor - Macoratti
ASP .NET Core - CRUD usando Blazor e Entity ... - Macoratti
Blazor - O novo framework SPA da Microsoft - Macoratti.net
ASP.NET Core MVC - Criando um Dashboard ...
C# - Gerando QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google
ASP .NET Core - Gerenciador de Despesas ...
ASP .NET Core - Acessando dados com Entity .
ASP.NET Core Web API - Tratamento de erros
Visual Studio Code - Suporte ao desenvolvimento Blazor