我想知道是否可以在不使用@ref
的情况下直接在组件自己的标记体中读取组件的属性。
我想做的是复制@context
的相同功能
举个例子,我有一个名为PermissionBox的组件,它接受两个参数:
- PermissionId:用于读取权限的Id
- 内容:封装在PermissionBox主体中的子组件
和公共财产:
- 权限:此属性将在
OnInitialized
事件期间初始化
我想要实现的行为:
- 通过PermissionBox
- 如果
Permission.IsVisible
,则PermissionBox不呈现子元素
- 如果
- 按消费者
- 使用者可以直接从PermissionBox读取Permission
有可能吗?
PermissionBox组件
@if (Permission.IsVisible)
{
@Content
}
@code {
[Parameter] public string PermissionId { get; set; }
[Parameter] public RenderFragment Content { get; set; }
private Permission _Permission = null;
public Permission Permission => _Permission;
protected override void OnInitialized()
{
//some logic about PermissionId ...
_Permission = new Permission
{
IsVisible = true,
IsEditable = false
};
}
}
我想如何使用它
@page "/"
<PermissionBox PermissionId="">
<MyComponent Enabled="@context.Permission.IsEnabled"></MyComponent>
</PermissionBox>
<p>Index page</p>
@code {
}
是的,您使用generic
RenderFragment
[Parameter] public RenderFragment<Permission> Content { get; set; }
然后将您的权限对象传递给RenderFragment
@if (Permission.IsVisible)
{
@Content(Permission)
}
在这种情况下,context
实际上将是您的权限对象
<PermissionBox PermissionId="">
<MyComponent Enabled="@context.IsEnabled"></MyComponent>
</PermissionBox>
或者你可以";重命名";如果您想要,请将上下文设置为权限
<PermissionBox PermissionId="" Context="permission">
<MyComponent Enabled="@permission.IsEnabled"></MyComponent>
</PermissionBox>