如果这个问题看起来很愚蠢,请原谅。但是我对@
前缀的用法感到困惑。
将鼠标悬停在诸如onclick
之类的内置事件上时,Visual Studio中的IntelliSense会显示事件的类型(在这种情况下为onclick
)为Microsoft.AspNetCore.Components.EventCallback
,并且在实现{{ 1}}在组件中,类型显然又是EventCallback
;
但是为什么Microsoft.AspNetCore.Components.EventCallback
这样的内置事件应该以{{1}}作为前缀,而onclick
应该像一个属性一样声明(没有@
作为前缀) ?
答案 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
可以封装的方法的值。
对不起,有很多话要说,这只是材料的一小部分。但是该分开了。
希望这对您有帮助...