Events 在Blazor中,如何在页面加载时调用函数(事件名称)?
第一次进入Blazor 在开始模板中,我看到事件btnClicked是如何工作的 对于按钮事件,如下所示:Events 在Blazor中,如何在页面加载时调用函数(事件名称)?,events,call,blazor,Events,Call,Blazor,第一次进入Blazor 在开始模板中,我看到事件btnClicked是如何工作的 对于按钮事件,如下所示: 点击我 @代码{ 私有int currentCount=0; 私有void IncrementCount() { currentCount++; } } 当我想调用IncementCount而不是clickbutton时,它是什么代码行 但是在“onload page事件”中,或者这个事件叫什么 Thx求救 [Parameter] public int StartValue { get;
点击我
@代码{
私有int currentCount=0;
私有void IncrementCount()
{
currentCount++;
}
}
当我想调用IncementCount而不是clickbutton时,它是什么代码行
但是在“onload page事件”中,或者这个事件叫什么
Thx求救
[Parameter]
public int StartValue { get; set; }
private int currentCount = 0;
protected override void OnInitialized() // = On Page Load
{
currentCount = StartValue;
IncrementCount();
}
private void IncrementCount()
{
currentCount++;
}
或者,如果您不想简单地使用第一个StartValue:[Parameter]
public int StartValue { get; set; } = 0;
protected override void OnInitialized() // = On Page Load
{
currentCount++;
}
若要在组件完成渲染后对其进行初始化(可能需要等待DOM加载):有两种主要的方法可以做到这一点,任何一种都可以。我倾向于选择第一个,但第二个也能完成任务 第一种方法是在
@code
块中,您可以覆盖OnInitialized
方法。我使用异步版本,因为您可以启动任务,让页面基本信息加载,然后在设置时刷新
@code{
void方法()
{
//做些工作
}
Task SomeStartupTask()
{
//做一些基于任务的工作
返回Task.CompletedTask;
}
受保护的重写异步任务OnInitializedAsync()
{
方法();
等待任务();
}
这将在页面加载上完成工作,比如初始服务调用来填充数据,有条件地填充列表,无论您需要做什么。顺便说一句,我发现的一个技巧是,如果您将放入wait Task.Delay(1);
作为OnInitializedAsync方法主体的第一行,它将中断页面呈现中剩余的自由执行,因此您可以在初始加载仍在后台处理时获得初始和响应页面。这只是为了让页面响应更快
第二种方法是重写OnAfterRender
方法,该方法允许第1页完全呈现,然后执行。它还有一个默认输入bool firstRender
,可以用作数据加载和其他操作的条件
受保护的覆盖无效OnAfterRender(bool firstRender)
{
//有条件地执行以加载数据,否则将加载
//每次页面刷新时
if(firstRender)
{
//执行加载页面数据和设置属性的操作
}
}
对于此方法,需要记住的重要一点是,Blazor引擎检测到需要刷新UI时,它将随时执行,因此明智地使用firstRender
参数
根据您需要做什么,不同的生命周期方法在不同的时间可能有用,还有一些我没有涉及。为了进一步了解信息,我已经能够使用文档提供的内容,自己走得很远了,这个链接将让您开始使用生命周期方法
希望这有帮助!使用OnInitializedAsync需要注意的一件重要事情是,事件可以触发多次 根据您的应用程序,这可能不是您希望反复触发的内容
// variable in your page or component
public bool Initialized { get; set; }
// if not initialized
if (!Initialized)
{
// Do your initializations
// This way it only runs once
Initialized = true;
}
另一种方法是在组件或页面的构造函数中
这里有一个名为Index.razor的页面和一个名为Index.razor.cs的代码
在构造函数中
public void Index()
{
// Perform your initializations here
}
我需要:
- 在blazor中通过onload运行javascript
<body onload="writeConsole()">
您可以看到,我正在对我的JS文件中定义的两个不同的JS方法进行两次调用
起初,我认为需要重写的方法是OnInitialized()
,但实际上是在页面完全“加载”之前(所有DOM元素都还不可用),所以我使用了OnAfterRender(bool firstRender)
,它就像我使用原始的onload
事件一样工作
我正在调用的两个函数不带任何参数,也不返回任何内容,所以我使用了
InvokeVoidAsync()
?但在加载数据之前等待页面将很奇怪。也许,在第一次渲染后使用会更好。太感谢您提供的信息了!我确实单击了,给您+1(我仍然没有15分,所以现在不会显示)这就是我想要的:protected override void OnInitialized(){}----或者我不知道。谢谢。我在找类似的东西来设置blazor web assembly中表格行的默认背景色。它工作得很好,谢谢。谢谢。OnInitialized就是我要找的,但不知道…;)谢谢OnInitialized
<body onload="writeConsole()">
@page "/"
@inject IJSRuntime JS;
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<canvas id="mainCanvas" width="400" height="400"></canvas>
@code{
protected override void OnInitialized()
{
}
protected override void OnAfterRender(bool firstRender)
{
JS.InvokeVoidAsync("writeConsole");
JS.InvokeVoidAsync("initGrid");
}
}