ASP.NET Core Blazor WebAssembly實現一個簡單的TODO List
阿新 • • 發佈:2020-06-06
## 基於blazor實現的一個簡單的TODO List
最近看到一些大佬都開始關注blazor,我也想學習一下。做了一個小的demo,todolist,僅是一個小示例,參考此vue專案的實現[http://www.jq22.com/code1339](http://www.jq22.com/code1339)
先看實現的效果圖
[![](https://pic.downk.cc/item/5edb68bec2a9a83be5a8ef20.gif)](https://pic.downk.cc/item/5edb68bec2a9a83be5a8ef20.gif)
不BB,直接可以去看
### 原始碼與預覽地址
- 示例地址 [http://baimocore.cn:8081/](http://baimocore.cn:8081/)
- 原始碼地址 [BlazorAppTodoList](https://github.com/luoyunchong/dotnetcore-examples/tree/master/blazor/BlazorAppTodoList)
### 原始碼介紹
我們這裡刪除了預設的一些原始碼。只保留最簡單的結構,在Pages/Index.razor中。
@code程式碼結構中寫如下內容
1. 建立一個類,裡面包含 id,label,isdone三個屬性值。
```
public class TodoItem
{
public TodoItem () { }
public TodoItem (int id, string label, bool isDone)
{
Id = id;
Label = label;
IsDone = isDone;
}
public int Id { get; set; }
public string Label { get; set; }
public bool IsDone { get; set; }
}
```
2. 我們可以通過override重寫初始化,並給Todos設定一些資料。
```
private IList Todos;
private int id = 0;
protected override void OnInitialized ()
{
Todos = new List ()
{
new TodoItem (++id, "Learn Blazor", false),
new TodoItem (++id, "Code a todo list", false),
new TodoItem (++id, "Learn something else", false)
};
}
```
展示還有多少未完成的任務
```
```
當任務沒有時,我們展示預設效果,提示使用者無任務
```
```
一個IsActive的變數,用於指示當前checkbox的樣式,是否開啟已完成的任務移動到最下面。當勾選時,改變IsActive的值。並呼叫排序的功能。
```
private bool IsActive = false;
private void ActiveChanged()
{
this.IsActive = !this.IsActive;
this.SortByStatus();
}
private void SortByStatus()
{
if (this.IsActive)
{
Todos = Todos.OrderBy(r => r.IsDone).ThenByDescending(r => r.Id).ToList();
}
else
{
Todos = Todos.OrderByDescending(r => r.Id).ToList();
}
}
```
對於列表的展示我們使用如下ul li @for實現
```
Todo List(@Todos.Count(todo => !todo.IsDone)) Get things done, one item at a time.
Your todo list is empty.
``` 新增一個任務 ``` ``` 這裡我們用了一個Label變數,一個onclick事件。 ``` private string Label; private void AddItem() { if (!string.IsNullOrWhiteSpace(Label)) { Todos.Add (new TodoItem { Id = ++id, Label = Label }); Label = string.Empty; } this.SortByStatus(); } ``` **this.SortByStatus** 因為我們這裡還實現一個功能,就是當勾選(當任務完成時,我們將他移到最下面) ```-
@foreach (var item in Todos)
{
- @item.Label }
- xxx