这等效于事件在blazor中发出角度/值吗?

时间:2019-06-19 13:27:40

标签: angular vue.js events blazor

这是否等同于事件如闪电般散发出来? : https://angular.io/api/core/EventEmitter(以角度表示) https://vuejs.org/v2/guide/components-custom-events.html(正在调查中)

使用新的blazor语法@组件<>中的事件名称(3.0预览版6)

2 个答案:

答案 0 :(得分:1)

这项工作:

Index.razor

<SurveyPrompt Title="How is Blazor working for you?" Counter="@Counter" CounterChanged="@CounterChangedFiredEvent" />

<p>Counter: @Counter</p>

@code {
    private int Counter = 1;

    void CounterChangedFiredEvent(int counter)
    {
        Counter = counter;
        StateHasChanged();
    }
}

SuveyPrompt.razor

<input type="button" value="Previuos" @onclick="@Previous" />
<input type="button" value="Next" @onclick="@Next" />

@code {
    // Demonstrates how a parent component can supply parameters
    [Parameter] string Title { get; set; }

    [Parameter]
    private int Counter { get; set; }

    [Parameter]
    Action<int> CounterChanged { get; set; }

    void Next()
    {
        CounterChanged(++Counter);
    }

    void Previous()
    {
        CounterChanged(--Counter);
    }
}

答案 1 :(得分:0)

是的,是...

在Blazor中,事件是通过委托来定义和触发的,尤其是具有单个参数,两个,三个... 16参数,Action<T>,{{1 }}等,最重要的是新结构EventCallback,Func<T>等。所有这些委托都封装了具有给定参数数量的方法。

在Angular中,您可以使用类似这样的方法来回调方法:

Func<T, TResult>

在Blazor中,您可以使用类似的方法来调用封装在委托中的方法。

假设您在子组件中定义了一个参数属性,以封装从父组件作为组件参数传递的方法(如果您希望调用在父组件上定义的方法,并为其传递值,则可能是一个要求,例如int类型。parameter属性可以这样定义:

EventCallback<T>

这是将委托分配给父组件中的parameter属性的方法

this.valueChange.emit(this.counter); 

在子组件中,您应从此定义一个名为CallParentMethod的方法,该方法将由此调用封装在委托属性中的方法:

protected EventCallback<int> ValueChange {get; set;}

如您所见,InvokeAsync与Angular中的EventEmitter差不多。

请注意,我可以使用lambada表达式直接调用父方法。

希望这对您有帮助...