Blazor:内置@on {EVENT}和自定义EventCallback之间的区别

时间:2020-06-16 16:51:10

标签: blazor

如果这个问题看起来很愚蠢,请原谅。但是我对@前缀的用法感到困惑。

将鼠标悬停在诸如onclick之类的内置事件上时,Visual Studio中的IntelliSense会显示事件的类型(在这种情况下为onclick)为Microsoft.AspNetCore.Components.EventCallback,并且在实现{{ 1}}在组件中,类型显然又是EventCallback;

但是为什么Microsoft.AspNetCore.Components.EventCallback这样的内置事件应该以{{1​​}}作为前缀,而onclick应该像一个属性一样声明(没有@作为前缀) ?

using an <code>EventCallback</code>

using a builtin event

1 个答案:

答案 0 :(得分:4)

如果这个问题看起来很愚蠢,请原谅。但是我对@前缀的用法感到困惑。

一点也不……这是一个非常重要的问题,Blazor中的所有开发人员不仅应该能够回答问题,而且应该能够采取行动。

属性“ @onclick”是一个编译器指令,指示编译器创建EventCallback'delegate'。 EventCallback是一个存储对委托的引用的结构;就是方法,实际上是您分配给属性“ @onclick”的值,例如:

<button type="button" @onclick="ClickMe">Click me</button>

@code
{
     private void ClickMe()
    {
       Console.WriteLine("You clicked me...");
    }
}

如您所见,ClickMe是单击按钮时调用的方法。

您还可以使用Html元素属性“ onclick”而不使用@符号。当然,这不是编译器指令而是HTML元素属性,对不对? 而且它的值只能是JavaScript函数,例如:

<button type="button" onclick="window.ClickMe()">Click me</button>

现在,当您单击按钮时,在窗口对象上定义的名为ClickMe的JavaScript函数被称为...。请注意圆括号。

当然,有多种方法可以完成上述操作。

在您发布的照片​​中,模态组件具有名为onOK的属性,其类型为EventCallback,因此其值应为合适的方法ModalOnOK。以下代码段对此进行了说明:

Modal.razor(模态的定义)

@code{
    [Parameter]
    public EventCallBack onOK {get; set;}
}

如您所见,onOK是一个参数属性,其类型为EventCallBack。因此,在使用Modal组件的父组件中,应该为属性属性分配EventCallBack可以封装的方法的值。

对不起,有很多话要说,这只是材料的一小部分。但是该分开了。

希望这对您有帮助...