Я пытался записать в текстовый файл, а также вызывать асинхронные методы и StateHasChanged, но, похоже, ничего не получилось. работа.
Код: Выделить всё
@page "/todo"
@rendermode InteractiveServer
@inject API.IApi todoApi
Todo
Todo (@todos.Count(todo => !todo.IsDone))
Add Todo
[list]
@foreach (var todo in todos)
{
[*]
}
[/list]
@code {
public List todos = new();
public string? newTodo = "";
public async Task ValidFormSubmitted()
{
Console.WriteLine("Clicked");
if(!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
await Task.Run(() => todoApi.Write(todos));
newTodo = string.Empty;
}
}
protected override async Task OnInitializedAsync()
{
todos = await Task.FromResult(todoApi.Read());
Console.WriteLine("Initialized");
}
public async Task CheckboxChanged(EventArgs e)
{
await Task.Run(() => todoApi.Write(todos));
await InvokeAsync(StateHasChanged);
}
}
Код: Выделить всё
using System.Text.Json;
namespace Todolist.API
{
public class JsonApi: IApi
{
public void Write(List todos)
{
string json = JsonSerializer.Serialize(todos);
File.WriteAllText("todos.json", json);
}
public List Read()
{
string filename = "todos.json";
string json = "";
List todos = new List();
if (File.Exists(filename) && File.ReadLines(filename).Any())
{
json = File.ReadAllText(filename);
todos = JsonSerializer.Deserialize(json);
return todos;
}
else
{
File.Create(filename).Close();
return todos;
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ay-checked
Мобильная версия