【发布时间】:2021-03-01 11:48:22
【问题描述】:
我有一件小事要做。有我的问题。我打开一个组件,然后我可以单击“编辑”,然后我需要 3-4 秒,而页面上显示需要 html/css。我想要做的是,当我单击“编辑”时,我设置了“loading = true”,当组件完成渲染新的 html/css 时,我设置了“loading = false”。这是我要实现的目标的示例:
if (!edit) {
<h2>test</h2>
@foreach (var item in items) {
<p>Test item</p>
}
}
else {
<button @onclick = "() => { edit = true; }">
<h2>test other </h2>
<input />
<input />
}
这是我设置加载微调器以显示在页面上的方式:
await InvokeAsync(() => { loading = true; });
await InvokeAsync(() => { loading = false; });
所以,我的问题是,当一个人按下编辑时,我怎样才能使微调器自动开始在屏幕上旋转。我知道在 OnInitializedAsync 时该怎么做,但是在这种特定情况下,它没有被初始化,它只是显示了组件的不同部分(但需要 5 秒,巨大的代码)。有什么办法吗?
【问题讨论】:
-
您在设置加载属性/字段后是否调用“StateHasChanged()”?
-
不,不要设置它。 “等待 InvokeAsync(() => { loading = true; });”自动完成这项工作。但这不是问题。问题是我不了解 blazor 组件的生命周期。所以不知道把这个“loading = true”和“loading = false”放在哪里。它在 OnAfterRenderAsync 中吗?我如何让这个逻辑起作用
-
@PovilasDirse 您通常将其放置在调用加载数据之前和之后。有时我不得不使用
Thread.Sleep(1)来让屏幕在每次设置加载标志后更新。 -
所以,我想要这样:@onclick = "() => { await logic(); }"。在“逻辑”方法中,我会休眠线程并将编辑设置为 true?
-
@PovilasDirse 是的,在数据之前和之后,或者任何需要时间的东西。在“逻辑”内部编辑 = true;线程睡眠(1); StateHasChanged();做你的慢代码.....;编辑=假; StateHasChanged();