我知道,有CascadedParameter
个,但是它们需要CascadingValue
个才能工作。
好的,以前对该问题的描述不明确。所以这里更简单。
想象一个Blazor页面:
@page "/"
@attribute [Authorize, NavMenu(1, "My first page", "view_module", HeaderText = "Hello!")]
<MyCommonPageHeader/>
为什么使用NavMenu
属性?我整理好了,它是一些元数据,它使我可以生成带有每个配置页面链接的导航菜单。
我的目标是设计MyCommonPageHeader
组件,读取自定义属性(NavMenuAttribute
)并使用它在页面上显示标题。
我已经通过这种方式完成了
@page "/"
@attribute [Authorize, NavMenu(1, "My first page", "view_module", HeaderText = "Hello!")]
<MyCommonPageHeader Page="this"/>
我只需要将this
传递给每个组件实例。
我只想确保这里没有捷径,组件没有其他方法可以进入包含页面的类。
顺便说一句,如果您好奇的话,这里是NavMenuAttribute
的来源:
using Microsoft.AspNetCore.Components;
using System;
using System.Reflection;
namespace Woof.Blazor {
public class NavMenuAttribute : Attribute {
public string DisplayName { get; set; }
public string HeaderText { get; set; }
public int Order { get; set; }
public string Icon { get; set; }
public bool IsEnabled { get; set; } = true;
public NavMenuAttribute(int order, string displayName, string icon) {
Order = order;
DisplayName = displayName;
Icon = icon;
}
}
}
仅元数据。没有其他的。我在属性行中描述页面,现在我的应用程序中的所有其他内容都使用此描述,因此我不必重复任何事情。