我已经按照docs
中的说明制作了一个带有事件的组件如果我使用该组件的多个实例,有什么方法可以判断是哪个实例引发了该事件?
在“常规” .net中,通常有一个sender
参数。
请参阅我的BlazorFiddle
...或在这里查看我的示例代码:
ChildComponent
<div class="panel panel-default">
<div class="panel-heading">@Title</div>
<div class="panel-body">@ChildContent</div>
<button class="btn btn-primary" @onclick="OnClick">
Trigger a Parent component method
</button>
</div>
@code {
[Parameter]
private string Title { get; set; }
[Parameter]
private RenderFragment ChildContent { get; set; }
[Parameter]
private EventCallback<UIMouseEventArgs> OnClick { get; set; }
}
索引
@page "/"
<ChildComponent Title="Panel Title from Parent"
OnClick="@ShowMessage">Hello child 1</ChildComponent>
<br>
<br>
<ChildComponent Title="Panel Title from Parent"
OnClick="@ShowMessage">Hello child 2</ChildComponent>
<br>
<br>
<p><b>@messageText</b></p>
@code {
private string messageText;
private void ShowMessage(UIMouseEventArgs e)
{
// How do I get which ChildComponent was the sender?
messageText = DateTime.Now.ToString() + ": Message from child ?"
}
}
我希望能够从Index的ShowMessage函数中的发送ChildComponent中获取数据。
答案 0 :(得分:4)
很遗憾,您没有发件人,并且此主题已在此处讨论:https://github.com/aspnet/Blazor/issues/1277。
不。那将涉及创建一些新的方式来跟踪 一个DOM元素。
如果您能够在更高层次上描述哪种 您正在尝试实现的功能,可能还有更多 惯用的Blazor方式轻松实现您想要的目标。
解决方法是将参数(事件和其他)显式传递给您的ShowMessage
方法。
@page "/"
<ChildComponent Title="Panel Title from Parent"
OnClick="@((ev) => ShowMessage(ev, 1))">Hello child 1</ChildComponent>
<br>
<br>
<ChildComponent Title="Panel Title from Parent"
OnClick="@((ev) => ShowMessage(ev, 2))">Hello child 2</ChildComponent>
<br>
<br>
<p><b>@messageText</b></p>
@code {
private string messageText;
private void ShowMessage(UIMouseEventArgs e, int childId)
{
// How do I get which ChildComponent was the sender?
messageText = DateTime.Now.ToString() + ": Message from child " + childId.ToString();
}
}
BlazorFiddler在这里:https://blazorfiddle.com/s/9zh85obk
为了跟踪是否有任何更新,您可以遵循以下问题:https://github.com/aspnet/AspNetCore/issues/5501