Ionic3学习笔记(十)实现夜间模式功能
本文为原创文章,转载请标明出处
目录
- 创建主题样式
- 导入
variables.scss - 创建 provider
- 创建 page
- 在 App 入口处应用主题
- 效果图
1. 创建主题样式
在 ./src/theme 文件夹下创建 theme.light.scss、theme.dark.scss 2个文件,分别用于日间模式、夜间模式的设置。
theme.light.scss:
.light-theme {
ion-content {
background-color: #f4f4f4;
}
.item {
background-color: #fff;
}
ion-textarea {
background-color: #fff;
}
.toolbar-background {
background-color: #f8f8f8;
}
.tab-button {
background-color: #f8f8f8;
}
}
theme.dark.scss:
.dark-theme {
ion-content {
background-color: #555;
}
.item {
background-color: #555;
}
ion-textarea {
background-color: #666;
}
.toolbar-background {
background-color: #444;
}
.tab-button {
background-color: #444;
}
}
这是我的2个主题样式,读者可以自己按需进行编写。
2. 导入 variables.scss
@import "theme.light";
@import "theme.dark";
3. 创建 provider
终端运行:
ionic g provider setting-data
setting-data.ts:
import {Injectable} from '@angular/core';
import {BehaviorSubject} from "rxjs/BehaviorSubject";
@Injectable()
export class SettingDataProvider {
// true: dark-theme
// false: light-theme
theme: BehaviorSubject<boolean>;
constructor() {
this.theme = new BehaviorSubject(false);
}
setActiveTheme(theme) {
this.theme.next(theme);
}
getActiveTheme() {
return this.theme.asObservable();
}
}
4. 创建 page
终端运行:
ionic g page setting
setting.html
<ion-header>
<ion-navbar>
<ion-title>设置</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<ion-list>
<ion-list-header>个性化设置</ion-list-header>
<ion-item>
<ion-label>夜间模式</ion-label>
<ion-toggle checked="{{theme}}" (ionChange)="toggleTheme()"></ion-toggle>
</ion-item>
</ion-list>
</ion-content>
setting.ts
import {Component} from '@angular/core';
import {IonicPage, NavController, NavParams, ToastController} from 'ionic-angular';
import {SettingDataProvider} from "../../providers/setting-data/setting-data";
@IonicPage()
@Component({
selector: 'page-setting',
templateUrl: 'setting.html',
})
export class SettingPage {
theme: boolean;
constructor(public navCtrl: NavController, public navParams: NavParams, public toastCtrl: ToastController, public settingDataProvider: SettingDataProvider) {
this.getActiveTheme();
}
getActiveTheme() {
this.settingDataProvider.getActiveTheme().subscribe(theme => {
this.theme = theme;
});
}
toggleTheme() {
if (!this.theme) {
this.presentToast('关闭应用后夜间模式将失效');
}
this.settingDataProvider.setActiveTheme(!this.theme);
}
presentToast(message: string) {
let toast = this.toastCtrl.create({message: message, duration: 2000});
toast.present().then(value => {
return value;
});
}
}
5. 在 App 入口处应用主题
app.html
<ion-nav [root]="rootPage" [class]="theme"></ion-nav>
app.component.ts
import {Component} from '@angular/core';
import {Platform} from 'ionic-angular';
import {StatusBar} from '@ionic-native/status-bar';
import {SplashScreen} from '@ionic-native/splash-screen';
import {SettingDataProvider} from "../providers/setting-data/setting-data";
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage: any = 'TabsPage';
theme: string;
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, settingDataProvider: SettingDataProvider) {
settingDataProvider.getActiveTheme().subscribe(theme => {
if (theme) {
this.theme = 'dark-theme';
} else {
this.theme = 'light-theme';
}
});
platform.ready().then(() => {
statusBar.styleDefault();
splashScreen.hide();
});
}
}
6. 效果
如有不当之处,请予指正,谢谢~
Ionic3学习笔记(十)实现夜间模式功能的更多相关文章
- JavaScript学习笔记(十二) 回调模式(Callback Pattern)
函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- [转帖]Linux学习笔记之rpm包管理功能全解
Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...
- go微服务框架kratos学习笔记十(熔断器)
目录 go微服务框架kratos学习笔记十(熔断器) 什么是熔断 熔断器逻辑 kratos Breaker kratos 熔断逻辑 kratos熔断器使用说明 bladmaster client br ...
- jsp学习笔记:mvc开发模式
jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
随机推荐
- 论文或github中一些通用思想
(1) 云从 上海交大 ECCV2018 http://openaccess.thecvf.com/content_ECCV_2018/papers/Yao_Feng_Joint_3D_Face_EC ...
- 正则表达式匹配字符串中的数字 Python
1.使用“\d+”匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650." m = ...
- linuxmint截图
利用import命令截图,并设置快捷键 shift + PrtScrSysRq: 选中区域截图. 设置快捷键的时候,提示: Ctrl + PrtScrSysRq: 复制截图到剪切板 PrtScrSys ...
- 怎么设置tomcat在get请求的中文也不乱码?两种情况下配置
我们都知道,get请求和post请求的一个比较显著区别就是,在使用post请求的时候,中文不会乱码,但是在使用get请求的时候,如果url后面带有中文就会乱码了.那么这个怎么解决呢? 前提:配置项目的 ...
- CentOS7 安装配置笔记
CentOS7 安装配置笔记 1.通过镜像安装 CentOS7 ==============================* 使用 UltraISO 9.7 或者 rufus-3.5p 制作ISO的 ...
- [HNOI2019]校园旅行(建图优化+bfs)
30分的O(m^2)做法应该比较容易想到:令f[i][j]表示i->j是否有解,然后把每个路径点数不超过2的有解状态(u,v)加入队列,然后弹出队列时,两点分别向两边搜索边,发现颜色一样时,再修 ...
- vue打包成app后,背景图片不显示
问题: 在使用npm run build 打包后, 如果在页面中使用img标签引入,打包后的路径是由index.html开始访问的,真正访问的是Static/img/图片名, 是正确的, 但是写在cs ...
- 2020 CCPC Wannafly Winter Camp Day1-F-乘法
题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个.关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的.感觉写着有点困难,自己写了一 ...
- iOS 一种很方便的构造TarBar
直接在TarBarController中操作,代码如下: #import "DLTabBarController.h" #import "ViewController.h ...
- python-django框架-电商项目-用户模块开发_20191117
实现注册的基本逻辑: 1,注册页面 注意:注册页面需要静态文件的支持,另外注册页面是基础基类的, 1,url,路由系统, 2,views,视图系统,还是使用类视图,里面有很多的函数, 2,views. ...