blazor - Blazor 中的不同方法调用
问题描述
我现在正在尝试 Blazor 一段时间,我试图找到关于两者之间区别的解释
<input type="button" onclick="@methodCall()">Something</button>
和
<input type="button" @onclick="() => methodCall()">Something</button>
为什么在 onclick 和 @ 成为价值的一部分之前,@ 是预期的?
解决方案
当您将“@”放在“onclick”之前时,您将创建一个编译器指令。如果尚未强制执行,此构造将在未来强制执行。它指示编译器创建一个 EventCallback 对象,该对象提供适当的委托,以处理您分配为 @onclick 指令值的代码。此设置:@onclick="() => methodCall()"
告诉编译器生成一个 EventCallback 对象,该对象提供适当的委托来执行 lambda 表达式。请注意,当您想要将值传递给 lambda 表达式封装的方法时,您可以使用此构造,例如:
@onclick="() => methodCall('Hello world')"
无效方法调用(字符串 str){}
如果您不必将值传递给被调用的方法,您应该这样构造@onclick 指令: @onclick="methodCall"
或者@onclick="@methodCall"
“@”符号告诉编译器@onclick 指令的值是可执行代码,而不仅仅是一个字符串,在这种情况下会触发错误。但正如您所看到的,“@”符号可以省略,并且不会引发错误,因为编译器知道它是一个方法名称,它使用适当的委托为其创建一个 EventCallback 结构对象。
这onclick="@methodCall()"
是错误的。它告诉 Blazor 创建一个输入 Html 元素,其值应该是名为“methodCall”的 JavaScript 方法,并且应该在 Blazor (C#) 中定义和执行。没有这样的动物。
您可以使用这样的构造:`onclick="methodCall()",在这种情况下,您需要定义一个名为 methodCall 的 JavaSript 方法...
你也可以这样做:onclick="alert('I'm a JavaScript method')"
最重要的是要记住,当您使用 Html 元素属性 onclick 时,它的值应该是 JavaScript 方法。这与@onclick 编译器指令完全不同......
希望这可以帮助...
推荐阅读
- partition - 文件大于其所在分区的大小
- c++ - 如何使用指针 C++ 将元素从 2D 数组复制到 1D 数组
- wikipedia - 如何获取包含某些类型内容表的 Wikipedia 页面列表?
- reactjs - React-Redux 未在 IE11 中更新
- reactjs - 找不到模块:错误:找不到带有 ident 'postcss' 的选项
- java - 如何确保我的 *jar 或 *class 将在 MacOS 上运行?
- javascript - 为什么渲染的图标没有响应状态的变化?
- typescript - 在 TypeScript 中,我们可以使用“运行时”键来定义新类型吗?
- angular - Jasmine Spy On Typescript 类 Get() 或 Set() 函数
- sql - postgres 从间接相关的表中删除