Gro*_*fit 2 asp.net asp.net-core blazor
Blazor 现在似乎支持某种形式的继承,但没有明确的文档围绕它抽象样式组件是可能的。
例如,假设我希望能够<DynamicComponent>在页面上插入 N 个元素,我需要能够预先知道它们公开了哪些道具以及如何填充它们。
因此,理想情况下,我希望强制任何制作此类组件的人始终具有以下字段:
@code {
[Parameter] public abstract EventCallback OnSomeMandatoryEvent {get;}
[Parameter] public abstract ISomeInterface Data {get;}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以确定我想要引入的组件将始终公开约定所需的属性。
那么这个用例是否受支持?
对于来这里寻找 Blazor 抽象类信息的其他人,您可以执行以下操作:
public abstract class CustomElementComponent : ComponentBase
{
[Parameter]
public EventCallback<string> SomeEvent { get; set; }
[Parameter]
public SomeModel Data { get; set; }
protected override Task OnInitializedAsync()
{
// whatever
return base.OnInitializedAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
@inherits CustomElementComponent
<div class="field">
<label class="label">Text To Show</label>
<div class="control">
<input class="input" type="text" @bind="Data.Text">
</div>
</div>
@code {
// All lifecycles from abstract class have been run and Data is available
}
Run Code Online (Sandbox Code Playgroud)
我很难找到专门围绕此问题的任何文档,因此虽然答案中上面的接口很好,但有时您需要一个抽象类,因为您也可以连接到那里的生命周期方法,从而允许您在基础层创建约定。
还值得注意的是,您还可以在抽象类上使用泛型并将其添加到使用组件中,如下所示@inherits CustomElementComponent<SomeType>
| 归档时间: |
|
| 查看次数: |
2912 次 |
| 最近记录: |