【发布时间】:2019-11-15 20:48:19
【问题描述】:
由于我想设计一些可重用的 Blazor 组件,我希望它们可以具有这样的功能:
假设我有一个自定义组件“MyComponent”,我可以在使用它时添加任何 CSS 属性:
<MyComponent Class="custom-css1 custom-css2">
some child content...
</MyComponent>
在 MyComponent 中,我通常会像这样将一些常见的 CSS 属性固定到顶部 wapper:
<div class="fixed-css1 fixed-css2">
some child content...
</div>
这意味着我必须将 CSS 属性的两个部分组合在一起以制作最终的 HTML,如下所示:
<div class="fixed-css1 fixed-css2 custom-css1 custom-css2">
some child content...
</div>
所以我想我应该有这个模式:
<div class="@Classes">
some child content...
</div>
@functions
{
[Parameter]
private string Class { get; set; } = "";
private string fixedClass = "fixed-css1 fixed-css2";
private string Classes
{
get
{
return $"{fixedClass} {Class}";
}
}
}
为了减少冗余代码,我可以创建一个基类,它具有受保护的 Class 属性以及它固有的每个组件,但我仍然无法避免在每个组件中编写相同的组合代码。我希望有一些解决方案可以直接在我的基类中添加这些自定义 CSS,我想我可以通过覆盖 ComponentBase clss 中的 BuildRenderTree 方法来实现这一点:
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
base.BuildRenderTree(builder);
}
但不幸的是,我尝试了所有手动构建的方法,但不知道如何完成。我不知道如何获取我的 HTML 元素(例如“div”)并向其添加额外的 CSS 属性。
所有这些都是关于做一个 Vue 可以轻松做到的功能。在 Vue 代码中,我们当然可以为组件添加任何属性并将它们传递给组件中的第一个元素。
谁能帮我完成这个目标或给我一些建议?
【问题讨论】:
-
我能问一下为什么使用您在基类上识别的模式不能解决您的问题吗?您只需使用
@Classes即可应用组合的 CSS。这实际上正是 Blazor 团队用来在表单输入控件上允许自定义 CSS 类的方法。 -
对不起,我可能没有清楚地描述我的观点,我希望将此模式应用于我的所有组件,这意味着我必须一次又一次地重复相同的组合代码(除了 Class属性),它很丑。
标签: c# asp.net-core razor blazor