Blazor:如何从子组件中的事件获取发件人

时间:2019-08-07 13:00:24

标签: asp.net-core blazor

我已经按照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中获取数据。

1 个答案:

答案 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