记录使用 ionic 开发过程中遇到的各种“坑”,附上相应的解决方案。
events.js:183
描述:
- 修改代码,保存时项目重新运行,但浏览器没有更新,项目运行中断报错。

解决:

- 执行命令
npm install ws@3.3.2 --save-dev --save-exact安装“ws”,devDependencies 配置为

- 安装成功,执行
ionic serve重启项目,修改代码保存不再报错

不能在 service 中注入使用 NavController
- 想当然地,在 service 中操作页面的跳转
import {Injectable} from '@angular/core';
import {NavController} from 'ionic-angular';
import {LoginPage} from '../../pages/login/login';
@Injectable()
export class AuthService {
constructor(private navCtrl: NavController) {}
showLogin() {
this.navCtrl.push(LoginPage); // 跳转到登录页
}
}
- 结果,却

- 但是,官方文档没有说 NavController 需要在 provider 中注册呀。查阅文档和 NavController 源码得知,NavController 不应该在 Component 除外的地方注入使用,它只有在组件中才能起作用,因为 IonicPage 装饰器自动将 NavController 作为每个页面的提供者


- 在 component 之外的地方如何使用 NavController ? 使用 App 的 getRootNav() 方法
import {Injectable} from '@angular/core';
import {App} from 'ionic-angular';
import {LoginPage} from '../../pages/login/login';
@Injectable()
export class AuthService {
constructor(private app: App) {
}
showLogin() {
this.app.getRootNav().push(LoginPage);
}
}
android 真机软键盘之坑
-
Android SDK 当前只有两种软键盘弹出模式:
- 焦点元素显示在可视范围,页面往上顶
- 界面布局不变,遮挡住焦点元素
-
android 键盘配置。在 AndroidManifest.xml 文件中的 里修改

// 键盘覆盖屏幕
android:windowSoftInputMode="adjustPan"
// 屏幕整体上移
android:windowSoftInputMode="stateVisible|adjustResize"
// 软键盘弹出,界面布局不变 (解决页面被压缩的问题)
android:windowSoftInputMode="adjustPan|stateHidden"