当前位置: 首页 > news >正文

统一配置管理根据不同域名展现不同信息或相近信息 Vue3类单例模式封装

背景:

我的项目在各种不同的域名使用,在不同域名需要展现的信息也不同,我就想要去做如何能统一管理

1.公共封装统一配置类

// clientTest
import { userBrowserLocation } from '@vueuse/core'; interface ClientTypes {}export const licenses = [{text:``},
]const defaultOptions: ClientOptions = {key: 'Artmate',logos: ['logo'],
}
/** 创建一个客户端 */
const createClient = (arr:string[],options?:ClientTypes )=>{let clientOptions=[];for(let i=0;i<arr.length;i++){clientOptions.push([arr[i],{...defaultOptions,...options}]);}
}
class ClientManager {private clientMap = new Map<string, ClientOptions>([...createClient(['客户端1']),/**  */...createClient(['客户端2','客户端3'],{'key1' : 'val2','key2' : 'val1'}),])/** 浏览器相关信息 */private browserLocation = useBrowserLocation();/** 是否存在某个客户端环境 */get hasClient() {return this.clientMap.has;}/** 获取当前客户端数据 */get currentClient() {//从 clientMap中根据当前浏览器的主机名获取对应的客户端配置//this.browserLocation.value.hostname 是当前访问网络的域名或IP地址//this.clientMap.get()方法会返回匹配的客户端配置,如果没有匹配项则返回undefinedconst options = this.clientMap.get(this.browserLocation.value.hostname);//这是一个条件语句,使用了可选链操作符(?.)//如果 options 存在且 options.name 也存在,则执行 useTitle(options.name)//useTitle() 是一个设置浏览器标签页标题的函数,将页面标题设置为当前客户端的名称options?.name && useTitle(options?.name);//使用空值合并操作符(??)返回结果//如果 options 不是 null 或 undefined,则返回 options    //否则返回默认配置 defaultOptionsreturn options ?? defaultOptions;}/** 获取客户端环境 */getClient(name : string) {const options = this.clientMap.get(name);if(!options) {throw new Error(`client ${name} not exists`);}}/** 获取所有客户端环境 */getClients() {return Array.from(this.clientMap.values());}
}export const clientManager = new ClientManager();

2.使用写法

<script lang="ts" setup>import clientManager from './testClient.ts';onMounted(()=>{//根据当前客户端域名,获取当前域名对应的信息console.log(clientManager.currentClient);//获取所有的客户端环境console.log(clientManager.getClients);})
</script>

知识点:

(1)什么是单例模式?

1.单例模式就是,通过 export const clientManager = new ClientManager();创建并导出唯一的实例

2.全局访问点:在整个项目中可以通过导入clientManager来访问这个唯一的实例

3.延迟初始化:实例在模块加载时创建,而不是在第一次使用时创建

http://www.dtcms.com/a/394793.html

相关文章:

  • 人工智能深度学习——循环神经网络(RNN)
  • 单例模式指南:全局资源的安全访问
  • 容器化 Tomcat 应用程序
  • Vue Router【前端】
  • 数据结构——受限线性表之栈
  • 数据结构(1)------ 三要素
  • BaaS(Backend as a Service)概述、平台、项目
  • 区间dp,数据结构优化dp等5种dp,各种trick深度讲解
  • 数据结构笔试选择题:题组1
  • 前端基础:从0到1实现简单网页效果(一)
  • 数据结构|图论:从数据结构到工程实践的核心引擎
  • AI赋能个人效能提升:实战演练工作规划、项目复盘与学习发展
  • 7. Linux RAID 存储技术
  • iOS 上架 App 费用详解 苹果应用发布成本、App Store 上架收费标准、开发者账号与审核实战经验
  • kafka 2.12_3.9.1 版本修复 Apache Commons BeanUtils 访问控制错误漏洞(CVE-2025-48734)
  • 二分查找经典——力扣153.寻找旋转排序数组中的最小值
  • 离散数学之命题逻辑
  • 【Linux命令从入门到精通系列指南】ping 命令详解:网络连通性诊断的终极工具
  • 游戏UI告别“贴图”时代:用Adobe XD构建“活”的设计系统
  • NXP - 用MCUXpresso IDE导入lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip中的工程
  • ✅ Python+Django租房推荐系统 双协同过滤+Echarts可视化 租房系统 推荐算法 全栈开发(建议收藏)✅
  • Django入门-3.公共视图
  • 【 设计模式 | 结构型模式 代理模式 】
  • 小杰机器学习高级(five)——分类算法的评估标准
  • IS-IS 中同时收到 L1 和 L2 的 LSP 时,是否优选 L1
  • 【开源】基于STM32的智能车尾灯
  • 电子电气架构 --- 软件开发与产品系统集成流程(下)
  • Ubuntu系统目录架构是怎么样的
  • 自动驾驶仿真之“场景交互”技术研究
  • 《AI管家还是数字化身?—— 一种面向未来的个人智能架构构想》