我发现vue中的$attrs对组件设计是一个很有帮助的东西。如果我有一个包装“a”标签的组件,我可以使用 $attrs 传递所有这些原生 Prop ,而无需将它们逐个声明为参数。例如,我有一个这样的组件:
<div>
<a href="@Href" onclick="@OnClick" class="@Classes" style="@Styles">@Content</a>
</div>
我必须声明“Href、OnClick、类、样式”等参数。但是我们知道标签“a”还有大量的其他属性,比如“target, hreflang...”,更不用说“input”标签等等了。我认为声称所有这些都是一个令人难以置信的长参数列表是愚蠢的。
那么 Blazor 是否为我们开发人员提供了类似的功能?
请您参考如下方法:
是的,确实如此。
您可以使用 Blazor 的新 ‘splat’ operator去做这个。例如:
// MyComp
<div id=“@Id” @attributes=“InputAttributes”></div>
@code {
[Parameter]
public string Id { get; set; }
[Parameter(CaptureUnmatchedValues = true)]
public Dictionary<string, object> InputAttributes { get; set; }
}
根据上面的示例定义参数将使其收集在组件上定义的与任何现有声明参数不匹配的任何属性。
用法:
<MyComp Id=“foo” class=“myclass” />
将呈现:
<div id=“foo” class=“myclass”></div>