给定一个使用Visual Studio 2019 Blazor服务器模板创建的"默认"Blazor应用程序。如何创建可从所有剃刀页面和组件访问的GLOBAL对象。
如何使"当前计数"值在MainLayout、NavMenu和Index页面上可见并"动态"更新?
当前计数:@currentCount
- 是否使用
[Parameters]
- 使用
[CascadingParameter]
- 创建静态类
- Blazor中推荐的方法是什么
实现这一点的一种方法是使用注入到允许事件订阅的组件中的单例服务。事实上,我几天前和其他人讨论过这个问题。
查看这篇文章,了解关于从单例激发的事件动态更新页面的讨论,该事件在连接之间进行更新。
这是一个工作演示,我改编自我正在进行的另一个项目,当你运行这个项目时,它会指示你打开另一个浏览器,复制/粘贴URL,并有一个更新的运行计数器和一个用于在页面之间传递消息的文本框。在框中输入内容,单击按钮,计数器会更新所有连接客户端的所有页面,消息也会传递到所有页面并显示。跨浏览器和跨连接工作。
类似的概念可以用于构建诸如长时间运行任务的后台通知、用户登录通知等。非常灵活地满足我的需求。
有两种方法。
CascadingParameter
和"状态容器"在本文中得到了很好的解释。
在CascadingParameter
和"状态容器"之间,您应该知道应用程序是如何工作的,并决定要做什么
对于GLOBAL object that is accessible from all the razor pages and components
这样的东西,状态容器可能会更好。
使用[参数]?
与其将所有参数传递给组件,不如使用CascadingParameter
创建静态类?
与其创建静态类,不如使用"State Container">
组件之间的通信可以通过三种方式实现,具体取决于您的需求。
-
父组件可以通过传递组件参数和引发事件让父组件知道发生了什么,反之亦然。
-
您可以启用CascadingValue功能,将值传递给流下游的所有子级,这些子级定义了CascadingParameter的属性。级联值可能是一个简单的字符串,但也可以是一个完整的组件。这是通过在要传递引用的组件中使用关键字This设置CascadingValue的Value属性来实现的,如下所示:
SomeComponent.razor
<CascadingValue Value="this">
@ChildContent
</CascadingValue>
我不喜欢使用这个功能。事实上,我从来没有使用过它。据说它的使用可能会有问题,等等。然而,它是Blazor的合法组成部分,如果你喜欢,没有理由不使用它。。。
- 实现State模式和Notification模式的服务。您通常会创建这样一个服务来管理应用程序的数据状态,包括将数据存储在集合中、从数据库检索数据等,使组件能够将数据存储到服务的集合中,通过引发事件处理程序通知组件,并将另一个组件刚刚添加的数据传递给它们,等等
给定一个"默认"Blazor应用程序-使用Visual Studio 2019 Blazor服务器模板创建。如何创建可从所有剃刀页面和组件访问的GLOBAL对象。
您应该实现一项服务。参见编号3。
创建静态类?
没有,没有静态类。创建服务
Blazor中推荐的方法是什么?
这完全取决于您的需求和要求。。。
如何使"当前计数"值在MainLayout、NavMenu和Index页面上可见并"动态"更新?
仅通过创建一个服务,允许您从给定位置传递当前计数,并将其传递到其他组件,如MainLayout、NavMenu、Index页面。
注意:我已经用工作代码详细回答了这些问题。我不知道他们的位置(到目前为止有400个答案(,但你可以去我的个人资料页面寻找他们。
希望这能帮助。。。