首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Blazor -是否可以从MainLayout中触发页面组件中的函数

Blazor -是否可以从MainLayout中触发页面组件中的函数
EN

Stack Overflow用户
提问于 2020-07-17 15:43:29
回答 1查看 313关注 0票数 0

我在我的MainLayout.razor组件中有一个侧面抽屉,用于设置/更改特定的值,然后在整个应用程序中使用这些值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<CascadingValue Value="@appValues" Name="AppValue">
    <SideDrawer OnUpdate="@RefreshPage"></SideDrawer>
    <div class="content px-4">
        @Body
    </div>
</CascadingValue>

当我更新SideDrawer中的值时,我执行一个EventCallback,通过它我可以更新变量,然后这些变量可以用作整个页面组件中的级联值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@code{
    public AppValues appValues = new AppValues();
    protected void RefreshPage()
    {
        appValues.value1 = somevaluefromsidedrawer;
        appValues.value2 = someothervaluefromsidedrawer;
        StateHasChanged();
    }
}

并且这些级联值在页面组件中可以很好地更新。但问题是,在页面组件中,有一种方法(比方说LoadData()),其中某些数据集应该根据这些级联值进行更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@code{
    [CascadingParameter(Name = "AppValue")]
    protected AppValues appValues { get; set; }
    protected void RefreshCurrentPage()
    {
        LoadData(appValues.value1);
    }
}

理想情况下,我希望能够从MainLayout.razor组件中的RefreshPage()方法调用页面组件中的RefreshCurrentPage()方法,以便根据更新后的值刷新页面组件中的所有datasets。

有可能做这样的事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 17:50:40

您可以通过多种方式完成此操作:

您可以将对MainLayout组件的引用以CascadingValue虚拟组件的形式传递给感兴趣的子组件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<CascadingValue Value="this" Name="TheMainLayout">
    
</CascadingValue>

子组件应该像这样获取引用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@code{
    [CascadingParameter(Name = "TheMainLayout")]
    public MainLayout MainLayout { get; set; }
    
}

并将其自身添加到MainLayout组件中定义的组件列表中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // Child component adds itself to the  MainLayout component
    protected override void OnInitialized()
    {
        MainLayout.AddPage(this);
    }

在MainLayout组件中,您将定义一个ComponentBase对象列表和AddPage方法,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void AddPage(ComponentBase page)
{
    // Code to add the page component to the list
}

既然MainLayout包含对组件的引用,它就可以直接调用在每个添加的页面组件中定义的RefreshCurrentPage (我猜它只能是一个,因为我们正在讨论可路由组件,对吧)。

注意:以上只是一个解决方案的概要。您可以对其进行扩展,以提供在每次需要刷新数据时都会引发的事件,并且每个页面组件都应该订阅该事件,当该事件引发时,将调用RefreshCurrentPage方法。与直接从MainLayout调用RefreshCurrentPage相比,这是一种更好、更复杂的方法。

您应该提供代码来从组件列表中删除添加的组件引用,当这些组件被终止时,等等。

请注意,不再需要appValues的CascadingValue,因为子组件持有对MainLayout的引用,并且可以直接访问这些值。

注意:上述所有过程都可以通过注入到MainLayout组件及其子组件中的服务类来实现。

再见了,伙计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62957401

复制
相关文章
代码触发 ECharts 中组件的行为
饼图程序调用高亮显示 注意js文件存放的位置 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Echarts事件与行为</title> <!--引入Echarts文件--> <script src="../js/echarts.min.js"></script> </head> <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style
别团等shy哥发育
2023/02/25
9760
代码触发 ECharts 中组件的行为
Blazor学习之旅(7)布局
Blazor 中的布局可以让我们编写的页面具有相同的导航菜单和页头页脚部分,提高通用代码的复用性,通过一次性的编写通用代码从而减少重复劳动。
Edison Zhou
2023/07/31
4200
Blazor学习之旅(7)布局
Blazor带我重玩前端(四)
新建一个Razor页面,所有新增的布局都要继承LayoutComponentBase,同时标识自定义内容的输出位置,即标识Body的位置。如图所示:
AI.NET 极客圈
2020/07/22
1.5K0
Day 04 Compoent及路由介紹
由于笔者当初是用ASP.NET Core API + Blazor Server,所以会以Blazor Server示范,日后研究完Blazor WebAssembly会再将心得补上。
沙漠尽头的狼
2021/12/15
1.3K0
Day 04 Compoent及路由介紹
go 中 struct 是否可以比较?
今天来水一篇,最近比较忙,一直没有时间写 go 相关的,今天从一个小问题入手,来说说 struct 的比较问题。
LinkinStar
2022/09/01
8440
页面重构中的组件制作要点
在写完前面“模块化”相关的文章后,感觉试图用“模块化”本身去讲什么是“模块化”真是不容易讲得清。相信大家都多多少少能理解什么是“模块化”,但是不容易说得清,也有不少同学反馈说缺少实例。现在的团队里在推“组件化”,做为“模块化”的一个应用方式,也许正好可以从另一个方面讲讲“模块化”的实现。
GhostZhang
2022/08/21
4750
Blazor 初探
上个月发了篇文章《Blazor 中如何下载文件到浏览器》,介绍了调用《下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统)》中提到的 VPS 文件中转下载服务后,如何将下载的文件以 Blazor 的方式传出到浏览器的方法。那么这篇文章就回过头来,介绍一下本项目(VPSDownloader.NET)使用 Blazor 的过程。
独立观察员
2022/12/06
2.1K0
Blazor 初探
vue中在父组件点击按钮触发子组件的事件
1、父组件的button元素绑定click事件,该事件指向notify方法 2、给子组件注册一个ref=“child” 3、父组件的notify的方法在处理时,使用了$refs.child把事件传递给子组件的parentMsg方法,同时携带着父组件中的参数msg 4、子组件接收到父组件的事件后,调用了parentMsg方法,把接收到的msg放到message数组中
江一铭
2022/06/16
6.3K0
vue.js 父组件如何触发子组件中的方法
组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。
IT工作者
2022/02/17
4.8K0
.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
这是我们计划在今年晚些时候发布的最终.NET 8版本之前的两个候选版本中的第一个。大部分计划中的功能和变更都包含在这个候选版本中,可以供您尝试使用。您可以在文档中找到完整的ASP.NET Core在.NET 8中的新功能列表[1]。一些领域(尤其是Blazor)仍然有一些重大的变更待完成,我们预计将在下一个.NET 8候选版本中完成这些变更。
用户10786849
2023/10/13
3500
.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
分层 Blazor 组件
作为加入单页应用程序 (SPA) 队伍的最新框架,Blazor 有机会在其他框架(如 Angular 和 React)的最佳特性基础之上构建而成。尽管 Blazor 背后的核心概念是利用 C# 和 Razor 来生成 SPA 应用程序,但明显受到其他框架启发的一个方面是使用组件。
AI.NET 极客圈
2019/08/23
8.4K0
分层 Blazor 组件
MAUI 与 Blazor 共享一套 UI 实现(五端通用)
距离上次发《MAUI初体验:爽》一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android、iOS、macOS、Windows之间共享UI,一处UI增加或者修改,就能得到一致的UI体验。
独立观察员
2022/12/06
4.1K0
MAUI 与 Blazor 共享一套 UI 实现(五端通用)
Blazor学习之旅(6)路由系统
Blazor 的路由系统就和 ASP.NET MVC的路由系统一样,可以为我们提供灵活的选项,可用于确保用户请求到达可处理它们并返回用户想要的信息的组件。
Edison Zhou
2023/07/27
3380
Blazor带我重玩前端(三)
需要升级VS2019以及.NET Core到最新版(具体的最低支持,我已经忘了,总是越新支持的就越好),以更好的支持自己开发Blazor项目。
AI.NET 极客圈
2020/07/09
1.7K0
Blazor带我重玩前端(三)
MAUI Blazor 项目实战 - 从0到1轻松构建多平台应用UI
最近在项目中尝鲜了MAUI,总体感受下来还是挺不错的,优缺点并存,但是瑕不掩瑜,目前随着.Net版本的迭代升级对它的支持也越来越友好,相信未来可期!感兴趣的朋友欢迎关注。文章中如有不妥的地方,也请多多指教。
郑子铭
2023/08/30
5920
MAUI Blazor 项目实战 - 从0到1轻松构建多平台应用UI
MAUI Blazor项目实战 从0到1轻松构建多平台应用UI
最近在项目中尝鲜了MAUI,总体感受下来还是挺不错的,优缺点并存,但是瑕不掩瑜,目前随着.Net版本的迭代升级对它的支持也越来越友好,相信未来可期!感兴趣的朋友欢迎关注。文章中如有不妥的地方,也请多多指教。
郑子铭
2023/08/30
3420
MAUI Blazor项目实战 从0到1轻松构建多平台应用UI
[C#] Blazor练习1
为了设置 Blazor 项目来配合工作,我们将使用 Visual Studio Code。Visual Studio Code 包含一个集成终端,这使创建新项目变得简单。如果不想使用其他代码编辑器,可在终端中运行此模块中的命令。
科控物联
2022/03/29
8780
[C#] Blazor练习1
Blazor创建TabControl组件
请先创建一个Blazor项目(Blazor Client或者Server皆可,我们以Blazor Server为例),
沙漠尽头的狼
2021/12/08
1.8K0
Blazor创建TabControl组件
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
接下来的几篇文章将围绕一些‘猎奇’场景,从原理颠覆对 React 的认识。每一个场景下背后都透漏出 React 原理,
用户6835371
2021/10/18
3.8K0
「React进阶」我在函数组件中可以随便写 —— 最通俗异步组件原理
[吃螃蟹]基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜
  BlazAdmin 是一个基于Blazui的后台管理模板,无JS,无TS,非 Silverlight,非 WebForm,一个标签即可使用。   我将在下一篇文章讨论 Blazor 服务器端渲染与客户端渲染的基本原理,对比服务器端渲染与 WebForm 的异同点   经过近一个月的开发,BlazAdmin 尝鲜版终于搞定了,功能很有限,同时也存在很多问题,只集成了一个后台管理系统最基本的功能,包括:
李明成
2020/02/12
1.3K0

相似问题

从Blazor中的页面组件调用MainLayout中的方法

260

Blazor,更改页面时如何更改MainLayout中的组件

211

从mainLayout Blazor调用@Body中的方法

11

Blazor:新页面未在MainLayout @body中呈现

151

是否可以在根索引页面中添加blazor组件?

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文