Alain 配置管理
app/assets/tmp/app-data.json 中保存了默认的一些应用配置
- app 应用配置
- user 默认用户配置
- menu 菜单配置信息
在 App.Module 中,使用 APP_INITIALIZER 进行提前加载。
StartupServiceFactory 工厂函数通过调用 StartupService 来实现数据加载。See:https://github.com/ng-alain/delon/blob/master/schematics/application/files/src/app/core/startup/startup.service.tsls
加载的时候,使用 zip 加载了 2 个部分的数据。
const defaultLang = 'en-US';
return zip(this.i18n.loadLangData(defaultLang), this.httpClient.get('assets/tmp/app-data.json'))
之后,映射出来两个对象 langData, appData
map(([langData, appData]: [Record<string, string>, NzSafeAny]) => {
保存到 SettingsService 对象实例中。
// 应用信息:包括站点名、描述、年份
this.settingService.setApp(appData.app);
SettingsService 中保存应用的配置信息
见: https://ng-alain.com/theme/settings/zh
包括:
- app
- user
- layout
默认保存到 localStorage 中,所使用的键值
export interface SettingsKeys {
/** Layout data specifies the stored key, default: `layout` */
layout: string;
/** User data specifies the stored key, default: `user` */
user: string;
/** App data specifies the stored key, default: `app` */
app: string;
}
然后,尝试加载 JWTTokenModel
let token: any = this.tokenService.get(JWTTokenModel);
if (token) {
user.name = token.name;
user.email = token.email;
}
this.settingService.setUser(user);
// ACL:设置权限为全量
this.aclService.setFull(true);
// 初始化菜单
this.menuService.add(appData.menu);
// 设置页面标题的后缀
this.titleService.default = '';
this.titleService.suffix = appData.app.name;
i18n.service.cs 中注入了 SettingsService 来获得语言配置信息
if (this.settings.layout.lang) {
return this.settings.layout.lang;
}
在 callback.componet.cs 中,当用户登录之后的回调中,重新设置当前用户信息。
this.settingsSrv.setUser({
...this.settingsSrv.user,
...info
});
需要注意的是,SettingsService 提供了一个 notify 的属性,用来返回一个 Observable 的可观察对象。
get notify(): Observable<SettingsNotify> {
return this.notify$.asObservable();
}
当重新设置用户的时候,会发射一个通知出来。
setUser(value: U): void {
this._user = value;
this.setData(this.KEYS.user, value);
this.notify$.next({ type: 'user', value });
}
当访问 user 属性的时候,如果还没有设置用户,会从默认的 localStorage 中读取出来当前用户的数据
get user(): U {
if (!this._user) {
this._user = { ...this.getData(this.KEYS.user) };
this.setData(this.KEYS.user, this._user);
}
return this._user as U;
}
使用的键值如下:
export interface SettingsKeys {
/** Layout data specifies the stored key, default: `layout` */
layout: string;
/** User data specifies the stored key, default: `user` */
user: string;
/** App data specifies the stored key, default: `app` */
app: string;
}
Alain 配置管理的更多相关文章
- sql server 2008 R2配置管理
安装vs2013后,sql server 2008R2配置管理提示“远程过程调用失败” 这是因为vs2013自带的Microsoft SQL Server 2012Local DB与之冲突. 通过升级 ...
- Struts2 源码分析——配置管理之PackageProvider接口
本章简言 上一章讲到关于ContainerProvider的知识.让我们知道struts2是如何注册相关的数据.也知道如何加载相关的配置信息.本章笔者将讲到如何加载配置文件里面的package元素节点 ...
- Struts2 源码分析——配置管理之ContainerProvider接口
本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的Contai ...
- 【2016-10-27】【坚持学习】【Day14】【VS 配置管理器 AssemblyInfo 】
有这样一个需求,不同客户,有不同的逻辑,通过配置管理器和条件编译进行 自动执行正确的代码.
- 统一配置管理-百度disconf
之前一直采用properties文件管理配置信息,若是集群则每个机器上都要拷贝一份,每次修改也需要依次修改.一直在寻找统一修改,实时生效,方便修改,分环境分系统的配置管理,自己也在整理设计,若找不到合 ...
- ****CI框架源码阅读笔记7 配置管理组件 Config.php
http://blog.csdn.net/ohmygirl/article/details/41041597 一个灵活可控的应用程序中,必然会存在大量的可控参数(我们称为配置),例如在CI的主配置文件 ...
- 一个简单的配置管理器(SettingManager)
在很多.net开发的项目中,我们几乎都会使用到一些自定义的参数,比如说第三方的配置参数之类的. 他们的特点是:1.系统全局 2,可以做成键值对(Dictionary). 我们可以将这些参数放到Web. ...
- 配置管理服务diamond和disconf横向对比
Diamond则是淘宝开源的一种分布式配置管理服务的实现 disconf是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在使用! 对比项目 ...
- Winform开发框架之参数配置管理功能实现-基于SettingsProvider.net的构建
在较早时期,我写过一篇文章<结合Control.FirefoxDialog控件,构造优秀的参数配置管理模块>,介绍过在我的Winform框架基础上集成的参数配置模块功能,但是参数模块的配置 ...
- Yii2所提倡的配置管理方案
无意中看到Yii2提供的高级应用模板,里面将入口文件与环境相关配置项放到独立的目录下的相应文件中.这应该算是一种比较理想的应用配置管理方案了. 以前整理过一种思路:http://www.cnblogs ...
随机推荐
- .NET 开源 EF Core 批处理扩展工具,真好用
前言 Entity Framework Core(EF Core)作为 .NET 生态系统中受欢迎的对象关系映射器(ORM),其轻量级.可扩展性和支持多个数据库引擎而备受青睐. 本文将介绍一款.NET ...
- 一生财运三世书财运测算api接口免费版_json格式数据获取
三世书财运是根据生辰八字推算出的一个人今生的财运状况,它认为人的财运受到前世因果的影响,同时也会受到今生行为的影响.这种算命方法起源于佛教的<三世因果经>,据说可以推演一个人的前世.今 ...
- 2023年6月墨天轮中国图数据库排行榜:TGS 开新局,创邻和字节多点突破露锋芒
鸿鹄不坠青云志,鲲鹏展翅九万里. 2023年 墨天轮中国图数据库流行度排行 已经火热出炉,本月中国图数据库排行榜共有31个数据库参与排名,相比今年1月新增3个数据库.本月图数据库榜单前十变动较大:Tu ...
- iOS中RunLoop和线程的关系
RunLoop又叫运行循环,主要用来管理线程.一个线程对应一个RunLoop,一个RunLoop又有五种模式.只有主线程的RunLoop是默认开启的,所以程序在开启后,会一直运行,不会退出.其他线程的 ...
- 什么是 DOM
百度: DOM 定义:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.它是一种与平台和语言无关的应用程序接口(API),它可 ...
- break,continue,return的只要区别
a)break 结束当前循环体 b)continue 结束本次的循环,执行下次的循环 c)return 结束函数体,并返回值 d)break 和 continue 写在循环里(for,while)re ...
- C#WebApi 对数据进行缓存加快前请求数据的速度
using ClassLibrary1; using ClassLibrary2; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions ...
- 66.有没有碰到过数组响应丢失(问的是ref和reactive的用法,什么情况下用)
由于vue3使用proxy,对于对象和数组都不能直接整个赋值. 直接赋值丢失了响应性 只有push或者根据索引遍历赋值才可以保留reactive数组的响应性 : 可以使用 toRefs 解决这个问 ...
- 大数据技术之Shell
1. shell概述 示意图: Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ● L ...
- 5.29 相约杭州!云原生 Meetup 第二期杭州站开启报名
以容器技术和容器编排为基础的云原生应用,被越来越多的企业用户接受和使用,并且在生产环境中使用容器技术的比例逐年增加.KubeSphere 作为一款面向应用的开源容器混合云,经过 3 年的发展和 10 ...