我的一个剃须刀组件库有问题。
我的组件有一个抽象基类RazorHtmlComponent
,它有一个参数属性[Parameter] public string InlineClass { get; set; }
,用于将 css 类映射到实际组件。然后,每个组件都有另一个基类,其中包含组件特定的属性,其定义如下:abstract class BaseRazorButton: RazorHtmlComponent
我的组件,在这个例子中RazorButton.razor
继承自抽象按钮基类BaseRazorButton
。
问题是,当我实例化一个剃须刀按钮并将属性设置InlineClass
为任何值时,它在我的实际RazorButton
实例中保持为空。
这是一个最小的代码示例,以便更好地理解:
基类:
public abstract class RazorHtmlComponent : ComponentBase, IRazorHtmlComponent
{
[Parameter] public string InlineClass { get; set; }
public DomDefinitionMapper ClassMapper { get; }
...
protected RazorHtmlComponent()
{
ClassMapper = new DomDefinitionMapper(InlineClass);
}
Dom 定义映射器:
public class DomDefinitionMapper
{
public List<Func<string>> DefinitionRepository { get; } = new List<Func<string>>();
public DomDefinitionMapper(string definition = "")
{
if (!string.IsNullOrEmpty(definition))
{
DefinitionRepository.Add(() => definition);
}
}
public string GetDefinitions(char separator = default)
=> separator.Equals(default) ?
string.Join(" ", DefinitionRepository.Select(i => i()).Where(i => i != null))
: string.Join($" {separator}", DefinitionRepository.Select(i => i()).Where(i => i != null));
}
按钮基类:
public abstract class BaseRazorButton: RazorHtmlComponent
{
...
}
剃刀按钮组件:
@inherits BaseRazorButton
<button class="@ClassMapper.GetDefinitions()">
@Text
</button>
Razor 按钮的实例化:
<RazorButton InlineClass="page"
Text="1"/>
当我在浏览器中检查时,InlineClass
未设置使用参数定义的类“页面”。在调试模式下, ClassMapper
DefinitionRepository
不包含类。
我错过了什么吗?我只是不明白为什么它不起作用:/