ionic 采坑

634 阅读1分钟

记录使用 ionic 开发过程中遇到的各种“坑”,附上相应的解决方案。

events.js:183

描述:
  • 修改代码,保存时项目重新运行,但浏览器没有更新,项目运行中断报错。

解决:
  • 参考 #2922#2921 定位到问题是由依赖“ws”导致的。 package.json 的 devDependencies 配置为

  • 执行命令 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"