我已经看到了如何使用该@ref属性从父组件调用子组件方法的示例,但是当我尝试将其与foreach循环一起使用时,只有最后渲染的组件的方法被调用,而不是全部。以下是我的组件的示例。
父组件:
<button type="button" class="btn btn-link" @onclick="BtnSyncAll_Click">Run<button>
@foreach(var site in Sites)
{
<Site @ref="SiteView" @Code="@site"></Site>
}
@code {
protected Site SiteView;
protected List<string> Sites { get; set; } = new List<string>
{
"A00001",
"A00002"
};
protected async Task BtnSyncAll_Click()
{
await SiteView.Sync();
}
}
Run Code Online (Sandbox Code Playgroud)
子组件(Site.razor):
<div>
<p>@Code>/p>
</div>
@code {
[Parameter]
public string Code { get; set; }
protected async Task Sync()
{
await ...
}
}
Run Code Online (Sandbox Code Playgroud) 我有Foo.razor:
@foreach (var item in items) {
<p>@item</p>
}
@code {
private List<string> items = new List<string>();
public void Append(string item) => items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
如果我有Bar.razor:
<Foo/>
@code {
public void SomeMethod() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能Append("something")从打电话SomeMethod()?