我在 Blazor 中有一个组件,可以接受方法作为参数。
<SuppliersTable Loader="@LoadS" LoaderO="@LoadO" Adder="@Add" Updater="@Update" Remover="@Remove" />
@code {
async Task<List<Supplier>> LoadS() => (await ModelServiceS.GetAllAsync()).ToList();
async Task<List<Operator>> LoadO() => (await ModelServiceO.GetAllAsync()).ToList();
async Task<bool> Add(Supplier model) => await ModelServiceS.AddAsync(model);
async Task<bool> Update(Supplier model) => await ModelServiceS.UpdateAsync(model);
async Task<bool> Remove(Supplier model) => await ModelServiceS.RemoveAsync(model);
}
但如果您在方法名称前面不加 "@",它是否会执行完全不同的操作?编译器接受两种方式,这就是我在问的原因。我有这样的感觉,用 "@" 执行该方法并将返回值作为参数传递,而不带 "@" 则只是引用要由父组件调用的方法(这正是我想要的)。是否有人能够提供更多有关 "@" 的使用细节?
SuppliersTable 组件的参数类型如下:
[Parameter] public Func<Task<List<Supplier>>> Loader { get; set; }
[Parameter] public Func<Task<List<Operator>>> LoaderO { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Adder { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Updater { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Remover { get; set; }