思路:整体思路是准备多套不同主题的css样式。在anguar项目启动时,首先加载的index.html中先引入一套默认的样式。当我们页面有动作时再切换css.  可以通过url传参触发,也可以通过button触发。下面演示的是url传参切换。button同理,只要调用有同的方法触发就行。

首先,index.html

<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>CMDB Front</title><base href="./"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><!--下面两行是引入换肤的css样式--><link href="assets/skin/css/classic.css" rel="stylesheet" type="text/css"><link id="skin" rel="stylesheet" type="text/css"></head>
<body><app-root><div style=" display: flex;justify-content: center;align-items: center;height: 100vh;color: #DDDDDD;text-transform: uppercase;font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica,sans-serif;font-size: 2.5em;text-shadow: 2px 2px 10px rgba(0,0,0,0.2);background: white;margin: 0;padding: 0;">Loading<span >.</span><span >.</span><span >.</span></div></app-root></body>
</html>

第二步是在根组件app.component.ts中接收url参数

import {Component, OnInit} from '@angular/core';
import {ActivatedRoute} from "@angular/router";
import {SkinService} from "./shared/SkinService";@Component({selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{public dataSkin:any; //接收路由传参的皮肤参数title = 'app';constructor(public activeRoute:ActivatedRoute,public skinService:SkinService) { }ngOnInit(){this.activeRoute.queryParams.subscribe(params=>{this.dataSkin=params['defaultTheme'];console.log("######",this.dataSkin)if(this.dataSkin =='gwjd'){this.skinService.showStyleOne(this.dataSkin);//国网经典主题return;}if(this.dataSkin=='classic'){this.skinService.showStyleTwo(this.dataSkin); //默认主题return;}if(this.dataSkin=='hhyz'){this.skinService.showStyleThree(this.dataSkin); //浩瀚宇宙主题return;}if(this.dataSkin=='kjzg'){this.skinService.showStyleFour(this.dataSkin); //科技之光主题return;}if(this.dataSkin=='lscs'){this.skinService.showStyleFive(this.dataSkin); //绿色城市主题return;}if(this.dataSkin=='rqpb'){this.skinService.showStyleSix(this.dataSkin); //热情拼搏主题return;}else{this.skinService.showStyleDefault(); //如果路由里没有携带皮肤参数,显示默认皮肤。
      }});}
}

其次是skinService做的cookie处理。

import {Injectable} from "@angular/core";
/*** Created by zhengxiaoya on 2018/6/11 13:28.*/
@Injectable()
export class SkinService {constructor(){}showStyleOne(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.//  var StyleOneId=document.getElementById('u2923').id;var StyleOneId=skin;console.log("######a",StyleOneId);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(StyleOneId) +"; expires=" + exp.toDateString();// add selected$("#"+StyleOneId).addClass("selected").siblings().removeClass("selected");$('#skin').attr("href","assets/skin/css/"+(StyleOneId)+".css");}showStyleTwo(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleTwoId=document.getElementById('u2924').id;var StyleTwoId=skin;console.log("StyleTwoId",StyleTwoId);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(StyleTwoId) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(StyleTwoId)+".css");}showStyleThree(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleThreeId=document.getElementById('u2933').id;var StyleThreeId=skin;console.log("StyleThreeId",StyleThreeId);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(StyleThreeId) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(StyleThreeId)+".css");}showStyleFour(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleThreeId=document.getElementById('u2933').id;var showStyleFour=skin;console.log("StyleThreeId",showStyleFour);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(showStyleFour) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(showStyleFour)+".css");}showStyleFive(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleThreeId=document.getElementById('u2933').id;var showStyleFive=skin;console.log("StyleThreeId",showStyleFive);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(showStyleFive) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(showStyleFive)+".css");}showStyleSix(skin){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleThreeId=document.getElementById('u2933').id;var showStyleSix=skin;console.log("StyleThreeId",showStyleSix);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(showStyleSix) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(showStyleSix)+".css");}showStyleDefault(){var Days = 30;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);// 获取到样式1的id.// var StyleThreeId=document.getElementById('u2933').id;var StyleThreeId='classic';console.log("StyleThreeId",StyleThreeId);// 把每次点击切换后的皮肤值存在cookie中document.cookie="skinId="+(StyleThreeId) +"; expires=" + exp.toDateString();$('#skin').attr("href","assets/skin/css/"+(StyleThreeId)+".css");}
}

url传参:http://localhost:4200/?defaultTheme='gwjd'

转载于:https://www.cnblogs.com/javazxy/p/9353397.html

angular2中一种换肤实现方案相关推荐

  1. 换肤方案,换肤策略,App插件式换肤实现方案

    UI换皮肤或白天黑夜模式,从产品上来看,是两种不同产品设计模式:白天黑夜模式只有两种模式:而换皮肤可以有多套,可以进行商业化,并盈利. 换肤的本质就是去替换资源文件.我们知道,Android应用程序由 ...

  2. 组件库自定义主题换肤实现方案

    概述 douluo-ui 组件库 是基于 element-ui 实现的,那么实现换肤分两步:一是 element-ui 的换肤方案:二是 douluo-ui组件库 的换肤方案 element-ui 的 ...

  3. 在WPF中创建可换肤的用户界面

    在WPF中创建可换肤的用户界面.                                                                       周银辉 译         ...

  4. 几种换肤软件使用问题

    几种换肤软件的使用和使用中的BUG                                                                                    ...

  5. Android三种换肤方案原理及Demo

    方案一:使用主题文件 定义换肤资源 在values/下新建一个xml文件,比如theme_attrs.xml,然后定义换肤的资源类型 <?xml version="1.0" ...

  6. 红橙Darren Android视频笔记 自定义view的三个构造方法以及一种实现换肤的方案 测量mode

    红橙Darren Android视频笔记 import android.content.Context; import android.support.annotation.Nullable; imp ...

  7. android view设置按钮颜色_Android 主题换肤技术方案分析

    写在前面 Android TV 电视开发,主题换肤,我感觉有两种层级的方式,一种是 系统级,另一种 是应用级, 我记得很早在 Linux 桌面开发的时候,我们之前的公司在GTK+上也实现了一套换肤UI ...

  8. Android 主题换肤技术方案分析

    写在前面 Android TV 电视开发,主题换肤,我感觉有两种层级的方式,一种是 系统级,另一种 是应用级, 我记得很早在 Linux 桌面开发的时候,我们之前的公司在GTK+上也实现了一套换肤UI ...

  9. Android 几种换肤方式和原理分析

    1.通过Theme切换主题 通过在setContentView之前设置Theme实现主题切换. 在styles.xml定义一个夜间主题和白天主题: <style name="Light ...

最新文章

  1. 在PHP语言中使用JSON
  2. 吐血整理:机器学习的30个基本概念,都在这里了(手绘图解)
  3. IDC机房:运营商机房与第三方机房(昌平机房)优劣对比
  4. springboot拦截器拦截提示_Springboot拦截器使用及其底层源码剖析
  5. php session修改时间,PHP如何修改SESSION有效时间?
  6. openj9下载_Quarkus on OpenJ9 JVM和资源消耗
  7. 百度利用AI技术8、9月打击超83亿条有害信息
  8. [引]SQL帮助文档:使用 WAITFOR 使SQL语句停顿后执行
  9. 图解sql内外连接和左连接left join和右连接right join
  10. java numberformat_NumberFormat(数字格式化类)
  11. Springboot实现QQ授权登录
  12. sl4a库_sl4a之pythonapi中文参考
  13. redis源码--SDS结构解析
  14. can例程 ecu_ECU程序及CAN总线实现
  15. python中interval函数_python pandas Interval用法及代码示例
  16. Win10系统自带功能,提高办公效率
  17. MYSQL之如何列转行
  18. ​stp文件转iges
  19. error MSB3073
  20. Unity NGUI 插件 简介

热门文章

  1. 《Artificial intelligence in healthcare》综述论文阅读
  2. js 如何获取td标签的值
  3. 禁用某盾加密破解、黄盾加密、sdhelper2.exe
  4. pdfFactory Pro 不能被安装(AddPrinterDriver 失败,找不到指定的模块)
  5. 7-21 集合相似度(C语言)
  6. 【美菜网】on、where以及having的区别
  7. 尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置】
  8. Mac 原神电脑版下载安装使用教程,MacBook 上也可以玩原神了
  9. 五问“ChatGPT+医学影像”:新一代的AI能否成为放射科医生的一把利器?
  10. python实现多人聊天udp_python_udp_多人聊天室_简单版