亲宝软件园·资讯

展开

BookStore示例项目---菜单栏UI分析

又见阿郎 人气:0
#### 部署 参照 [ABP示例项目BookStore搭建部署](https://www.cnblogs.com/zhiyong-ITNote/p/11874718.html) ### 项目解构 #### 1)、动态脚本代理 启动项目时,默认会调用两个接口 ``` /Abp/ApplicationConfigurationScript /Abp/ServiceProxyScript ``` ServiceProxyScript会解析项目路由,动态生成api路径。此两个接口封装在了`Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic`程序集中。一旦引用该程序集便会自动调用接口。 #### 1.1)、虚拟文件系统 说到虚拟文件系统,先要了解 [嵌入资源文件](https://www.cnblogs.com/ecin/archive/2012/02/26/2369139.html)。简而言之,就是以程序调用的形式访问文件。对于虚拟文件系统的了解,可以参考: [基于ASP.NET Core的模块化设计: 虚拟文件系统](https://blog.csdn.net/sD7O95O/articlehttps://img.qb5200.com/download-x/details/88967761) [ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名](https://www.cnblogs.com/waku/p/11438478.html) #### 1.2)、小结 上面说到的动态脚本代理是如何调用的?在模块 `Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared` 中有一类cshtml,它是嵌入式资源文件,以Page\Account文件夹下_ViewStart.cshtml为例: ``` @using Volo.Abp.AspNetCore.Mvc.UI.Theming @inject IThemeManager ThemeManager @{ Layout = ThemeManager.CurrentTheme.GetApplicationLayout(); } ``` 在这里调用`Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic`中的GetApplicationLayout方法: ``` public virtual string GetLayout(string name, bool fallbackToDefault = true) { switch (name) { case StandardLayouts.Application: return "~/Themes/Basic/Layouts/Application.cshtml"; case StandardLayouts.Account: return "~/Themes/Basic/Layouts/Account.cshtml"; case StandardLayouts.Empty: return "~/Themes/Basic/Layouts/Empty.cshtml"; default: return fallbackToDefault ? "~/Themes/Basic/Layouts/Application.cshtml" : null; } } ``` 而这三个cshtml视图文件都包含了这么一段脚本: ``` ``` 如此便调用了后端方法生成动态脚本,同时我们可以改造这里的视图,用来定制网站的菜单栏等UI界面。 #### 2)、UI界面菜单栏分析 #### 2.1)、ABP UI界面单测项目分析 ABP简单菜单栏分析,项目源码:https://github.com/abpframework/abp/treehttps://img.qb5200.com/download-x/dev/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo 如图: ![image](https://note.youdao.com/yws/api/personal/file/102338CC011A4682A201007F67BC9E47?method=getImage&version=7522&cstk=A8CTPvIC) 由上面得知,开始调用layout下的视图文件,用以加载动态js代理,但是同时还会去渲染菜单导航栏。 ``` @await Component.InvokeLayoutHookAsync(LayoutHooks.Body.First, StandardLayouts.Application) @(await Component.InvokeAsync

加载全部内容

相关教程
猜你喜欢
用户评论