Blazor';全球';参数-在MainLayout.razor、NavMenu.razor、Counter.razor之间来回传递

Blazor';全球';参数-在MainLayout.razor、NavMenu.razor、Counter.razor之间来回传递,blazor,blazor-server-side,Blazor,Blazor Server Side,给定一个“默认”Blazor应用程序-使用Visual Studio 2019 Blazor服务器模板创建。如何创建可从所有razor页面和组件访问的全局对象 如何使“当前计数”值在主布局、导航菜单和索引页面上可见并“动态”更新 当前计数:@currentCount 是否使用[参数] 是否使用[CascadingParameter] 创建一个静态类 Blazor中推荐的方法是什么 有两种方法可以做到这一点 CascadingParameter和“State Container”,在中有很好的解

给定一个“默认”Blazor应用程序-使用Visual Studio 2019 Blazor服务器模板创建。如何创建可从所有razor页面和组件访问的全局对象

如何使“当前计数”值在主布局、导航菜单和索引页面上可见并“动态”更新

当前计数:@currentCount

  • 是否使用
    [参数]
  • 是否使用
    [CascadingParameter]
  • 创建一个静态类
  • Blazor中推荐的方法是什么

  • 有两种方法可以做到这一点

    CascadingParameter
    和“State Container”,在中有很好的解释

    CascadingParameter
    和“State Container”之间,您应该知道应用程序是如何工作的,并决定做什么

    状态容器可能更适合于从所有razor页面和组件访问的
    全局对象

    使用[参数]

    您应该使用
    CascadingParameter

    创建一个静态类


    您不应该创建静态类,而应该使用“状态容器”

    组件之间的通信可以通过三种方式实现,具体取决于您的需求

  • 父组件可以通过传递组件参数和引发事件来与其子组件通信,以让父组件知道发生了什么,反之亦然

  • 您可以启用CascadingValue功能将值传递给流中定义CascadingParameter属性的所有子级。级联值可以是一个简单的字符串,但也可以是一个完整的组件。这是通过在要传递引用的组件中使用关键字This设置CascadingValue的Value属性来实现的,如下所示:

  • 剃刀
    
    @儿童内容
    
    我不喜欢使用这个功能。事实上,我从来没用过。它声称它的使用可能会有问题,等等。然而,它是Blazor的合法部分,如果你喜欢,没有理由不使用它

  • 实现状态模式和通知模式的服务。您通常创建这样的服务来管理应用程序的数据状态,这包括在集合中存储数据、从数据库检索数据等,使组件能够在服务集合中存储数据,通过引发事件处理程序通知组件,并向组件传递另一个组件刚刚添加的数据等
  • 给定一个“默认”Blazor应用程序-使用Visual Studio 2019 Blazor服务器模板创建。如何创建可从所有razor页面和组件访问的全局对象

    您应该实现一个服务。见第3条

    创建一个静态类

    不,没有静态类。创建服务

    Blazor中推荐的方法是什么

    这完全取决于你的需要和要求

    如何使“当前计数”值在主布局、导航菜单和索引页面上可见并“动态”更新

    仅通过创建一个服务,允许您从给定位置传递当前计数,并将其传递给其他组件,如MainLayout、NavMenu、Index pages

    注意:我已经用工作代码详细回答了这些问题。我不知道他们的位置(到目前为止有400个答案),但是你可以去我的个人资料页面寻找他们


    希望这能有所帮助……

    实现这一点的一种方法是使用注入到允许事件订阅的组件中的单例服务。事实上,几天前我和其他人讨论过这个问题

    有关从单个事件触发的事件动态更新页面的讨论,该事件跨连接更新

    我从我正在处理的另一个项目改编而来,当你运行这个项目时,它会指示你打开另一个浏览器,复制/粘贴URL,并有一个更新的运行计数器和一个用于在页面之间传递消息的文本框。在框中输入内容,单击按钮,计数器将从所有连接的客户端更新所有页面,消息也将传递到所有页面并显示。跨浏览器和跨连接工作


    类似的概念可用于构建诸如长时间运行任务的后台通知、用户登录通知等。根据我的需要,这些功能非常灵活。

    Thx!!!!!!!!。。在您的演示中-如何使用计数更新导航菜单?Count Value:@Service.CountValue需要从IndexBase继承吗?我需要更新所有组件…我认为最简单的方法是将
    @inherits OwningComponentBase
    放在导航菜单的顶部,然后在
    @code
    块中插入服务,添加
    OnStatusChanged
    方法,像我一样,对事件订阅和取消订阅执行
    OnInitializedAsync
    Dispose
    的覆盖。从那里,你可以像上面一样把柜台绑起来。我还没试过,但应该能用。让我知道这是否有帮助。似乎无法工作-Added@inherits OwningComponentBase,Added Home计数值:@Service.CountValue计数值:@Service.CountValue计数值:@Service.CountValue在代码[Inject protected SingleService Service{get;set;}之后添加公共字符串状态{get;set;}private async void OnStatusChangedMethod(对象发送方,EventArgs e){签出,它在导航栏上有一个按钮,与索引屏幕一样响应事件。
    <CascadingValue Value="this">
       @ChildContent
    </CascadingValue>