Exercício – Enlaces de dados e eventos
Neste exercício, você cria um componente básico da lista Todo dentro do seu aplicativo Blazor.
Criar a página Todo
Crie a página Todo:
No Visual Studio, clique com o botão direito do mouse na
Components/Pagespasta no Gerenciador de Soluções e selecione Adicionar>Componente Razor. Nomeie o componenteTodo.razor.No Visual Studio Code, clique com o botão direito do mouse na pasta
Pagesem Gerenciador de Soluções e selecione componente Adicionar Novo Arquivo>Razor. Nomeie o componenteTodo.razor. O arquivo deve ser criado dentro daPagespastaImportante
Os nomes de arquivo do componente Razor exigem uma primeira letra maiúscula. Expanda a
Pagespasta e confirme se o nome do arquivo doTodocomponente começa com uma letra maiúsculaT. O nome do arquivo deve serTodo.razor.Abra o
Todocomponente e adicione uma@pagediretiva Razor à parte superior do arquivo com uma URL relativa de/todo.@page "/todo" <h3>Todo</h3> @code { }Salve o
Components/Pages/Todo.razorarquivo
Adicionar o componente Todo à barra de navegação
O layout do aplicativo usa o NavMenu componente. Os layouts são componentes que permitem evitar a duplicação de conteúdo em um aplicativo. O NavLink componente renderiza uma marca âncora HTML que pode ser estilizada para fornecer uma indicação na interface do usuário do aplicativo quando a URL do aplicativo corresponde ao link.
Expanda a pasta Components/Layout no Solution Explorer e abra o arquivo NavMenu.razor .
<nav>...</nav> Na seção do componente NavMenu, adicione o seguinte novo <div>...</div> e NavLink componente para o Todo componente.
Em Components/Layout/NavMenu.razor:
<!-- .. -->
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
<nav class="flex-column">
<!-- ... -->
<div class="nav-item px-3">
<NavLink class="nav-link" href="todo">
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Todo
</NavLink>
</div>
</nav>
</div>
Guarde o ficheiro Components/Layout//NavMenu.razor. O navegador deve atualizar automaticamente e agora tem a entrada Todo na barra de navegação:
Criar um item Todo
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Nova Pasta. Nomeie a nova pasta Dados.
No Gerenciador de Soluções, clique com o botão direito do mouse na pasta Dados e selecione Adicionar>Classe. Nomeie a nova classe TodoItem.cs e selecione Adicionar. Essa nova classe manterá uma classe C# que representa um item todo.
Substitua o código da Linha 7 para baixo pelo seguinte código C# para a TodoItem classe. Declare o Title como uma cadeia de caracteres anulável usando ?. Guarde o ficheiro.
namespace BlazorHybridApp.Data;
public class TodoItem
{
public string? Title { get; set; }
public bool IsDone { get; set; } = false;
}
Vincular uma lista de TodoItems
Agora você está pronto para vincular uma coleção de TodoItem objetos ao HTML no Blazor. Para isso, faremos as seguintes alterações no Components/Pages/Todo.razor arquivo:
- Adicione a declaração using para
TodoItemcom@using BlazorHybridApp.Data. - Adicione um campo para os itens todo no
@codebloco . OTodocomponente usa esse campo para manter o estado da lista todo. - Adicione marcação de lista não ordenada e um
foreachloop para renderizar cada item todo como um item de lista (<li>).
@page "/todo"
@using BlazorHybridApp.Data
<h3>Todo</h3>
<ul class="list-unstyled">
@foreach (var todo in todos)
{
<li>@todo.Title</li>
}
</ul>
@code {
private List<TodoItem> todos = new();
}
Adicionar elementos de formulário para criar todos
O aplicativo requer elementos da interface do usuário para adicionar itens todo à lista. Adicione uma entrada de texto (
<input>) e um botão (<button>) abaixo da lista não ordenada (<ul>...</ul>):@page "/todo" @using BlazorHybridApp.Data <h3>Todo</h3> <ul class="list-unstyled"> @foreach (var todo in todos) { <li>@todo.Title</li> } </ul> <input placeholder="Something todo" /> <button>Add todo</button> @code { private List<TodoItem> todos = new(); }Quando o
Add todobotão é selecionado, nada acontece porque um manipulador de eventos não está anexado ao botão.Adicione um
AddTodométodo aoTodocomponente e registre o método para o botão usando o@onclickatributo. OAddTodométodo C# é chamado quando o botão é selecionado:<input placeholder="Something todo" /> <button @onclick="AddTodo">Add todo</button> @code { private List<TodoItem> todos = new(); private void AddTodo() { // Todo: Add the todo } }Para obter o título do novo item todo, adicione um
newTodocampo string na parte superior do@codebloco:@code { private List<TodoItem> todos = new(); private string? newTodo; // Omitted for brevity... }Modifique o
<input>elemento para vincularnewTodoao@bindatributo:<input placeholder="Something todo" @bind="newTodo" />Atualize o
AddTodométodo para adicionar oTodoItemcom o título especificado à lista. Limpe o valor da entrada de texto definindonewTodocomo uma cadeia de caracteres vazia:@page "/todo" @using BlazorHybridApp.Data <h3>Todo</h3> <ul class="list-unstyled"> @foreach (var todo in todos) { <li>@todo.Title</li> } </ul> <input placeholder="Something todo" @bind="newTodo" /> <button @onclick="AddTodo">Add todo</button> @code { private List<TodoItem> todos = new(); private string? newTodo; private void AddTodo() { if (!string.IsNullOrWhiteSpace(newTodo)) { todos.Add(new TodoItem { Title = newTodo }); newTodo = string.Empty; } } }Guarde o ficheiro
Components/Pages/Todo.razor. Recrie e reinicie o aplicativo.Você pode tornar o texto do título de cada todo editável, e uma caixa de seleção pode ajudar o usuário a acompanhar os itens concluídos. Adicione uma entrada de caixa de seleção para cada item todo e vincule seu valor à
IsDonepropriedade. Altere o@todo.Titlepara um<input>elemento vinculado atodo.Title@bindcom :<ul class="list-unstyled"> @foreach (var todo in todos) { <li> <input type="checkbox" @bind="todo.IsDone" /> <input @bind="todo.Title" /> </li> } </ul>Atualize o
<h3>cabeçalho para mostrar uma contagem do número de itens de todo que não estão completos (IsDoneisfalse).<h3>Todo (@todos.Count(todo => !todo.IsDone))</h3>Salve o
Components/Pages/Todo.razorarquivo e execute o aplicativo novamente.Adicione itens, edite itens e marque itens feitos para testar o componente.