是否可以在自己的标记体中使用Parent属性而不使用@ref



我想知道是否可以在不使用@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 {
}

是的,您使用genericRenderFragment

[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>

相关内容

  • 没有找到相关文章

最新更新