美文网首页
ionic2常见问题及解决方案

ionic2常见问题及解决方案

作者: 蜀城走马 | 来源:发表于2017-11-20 17:13 被阅读0次

    ionic2常见问题及解决方案

    一、app启动白屏的问题

    ​ app启动后大概有几秒的白屏,才会显示首页。解决方法有前辈放了,这边贴个链接解决方法

    二、gradle下载失败导致执行打包命令时报错

    ionic build android 是通过gradle编译,而且会在线下载gradle,墙内基本是下不了的,这就需要手动下载项目需要的gradle版本。 查看android platform下的build.gradle文件,看当前版本需要的gradle version。 下载成功后,放在myApp\platforms\android\gradle文件夹下, 命令行输入set CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=../gradle-2.14.1-all.zip(参考自简书作者:charles0427链接:http://www.jianshu.com/p/408254d76e74)

    三、ionic2中扩展自定义图标

    ​ ionic2开发app的实际使用中,ionic2官方的图标是不够用的,流行常用的图标都可以在阿里巴巴矢量图标中找到。需要扩展图标<ion-icon name="my-icon"></ion-icon>来使用,这里有详细的解决办法,亲身实践后可以完美的使用(详情请点击)。

    四、ionic2自定义处理返回按钮

    ​ APP开发过程中,有时需要自定义处理返回按钮的行为。一种方法是使用hideBackButton="true"隐藏app页面上自带返回按钮,然后自写返回按钮控制点击事件。

    <ion-header>
      <ion-navbar hideBackButton="true">
        <ion-buttons left (click)="selfGoBack()" >
          <button ion-button icon-only class="selfBack">
            <ion-icon name="selfBack"></ion-icon>
          </button>
        </ion-buttons>
      </ion-navbar>
    </ion-header>
    

    ​ 但是,上述方法并不能控制安卓手机实体返回按键。这时,就需要下列方法来处理页面的返回了:

    //注册返回按键事件
          this.platform.registerBackButtonAction((): any => {
            let activeVC = this.nav.getActive();
            let page = activeVC.instance;
    
            if (activeVC.component.name == 'HomeComponent') {
              this.platform.exitApp();
            }
          }, 101);
    

    ​ 上述方法中,需要在app.component.ts文件中注册返回按键事件。在我的实际使用中,我整个项目中有一个HomeComponent组件,也是我的首页。我需要在当前激活页面时,点击返回就退出app。判断条件我是根据取到activeVc上面的组件名,使用使用中根据自己的需要可以使用更多的参数或值。参数中的值101定义的是返回键行为的优先级,详情可点击此处了解

    五、开发安卓版app时,搜索成功页面未刷新

    ​ 实际应用场景是我做了一个可实时搜索的列表页面,用于选择模态框。HTML代码如下:

    <ion-header>
      <ion-navbar>
        <ion-title>选择{{title}}</ion-title>
        <ion-buttons left (click)="closeModal()">
          <button ion-button icon-only clear>
            <ion-icon name="md-arrow-back"></ion-icon>
          </button>
        </ion-buttons>
      </ion-navbar>
    </ion-header>
    
    <ion-content>
      <!-- <ion-refresher *ngIf="hasMore" (ionRefresh)="getData($event)">
        <ion-refresher-content></ion-refresher-content>
      </ion-refresher> -->
    
      <ion-list>
        <ion-item-group>
          <ion-item-divider color="light">
            <ion-searchbar
              placeholder="搜索名称"
              [(ngModel)]="keyword"
              (ionInput)="onInput($event)">
            </ion-searchbar>
          </ion-item-divider>
          <ion-item>
            <ion-row>
              <ion-col width-33>编号</ion-col>
              <ion-col width-67>{{title}}名称</ion-col>
            </ion-row>
          </ion-item>
          <ion-item *ngFor="let item of ableSelected" (click)="chooseItem(item)">
            <ion-row>
              <ion-col width-33>{{item.id}}</ion-col>
              <ion-col width-67>{{item.name}}</ion-col>
            </ion-row>
          </ion-item>
        </ion-item-group>
      </ion-list>
    
      <ion-infinite-scroll (ionInfinite)="getData($event)">
          <ion-infinite-scroll-content loadingSpinner="bubbles"
          loadingText="加载中 ..."></ion-infinite-scroll-content>
      </ion-infinite-scroll>
    </ion-content>
    

    ​ 该页面用于选择数据,当前页面有实时搜索数据和上拉刷新加载更多数据的功能,都是通过getData调用请求异步获取。问题点在于执行ionic serve在浏览器测试的时候,搜索功能很完美,但是在真机上测试时,输入文字进行名称筛选数据,请求成功展示数据更新,页面展示的列表缓存住,并未刷新页面。困扰了很久,最后找到方法。

    import {ChangeDetectorRef} from '@angular/core';
    
    export class SelectModalComponent(){
      constructor(public changeDetectorRef: ChangeDetectorRef) {
        
      }
      
      getData(){
        // 在数据更新后调用,更新页面防止页面缓存
        this.changeDetectorRef.detectChanges();
      }
    }
    

    ​ 在异步请求获取数据成功后,调用ChangeDetectorRef的detectChanges方法,可以解决页面缓存的问题。

    六、iOS端开发使用wkwebview替换uiwebview优化app性能

    ​ 适用ionic2开发ios端app的实际过程中,由于uiwebview浏览器技术极大的占用内存,会存在很多导致应用崩溃的情况。例如拍照保存在本地,写了一个查看已拍照图片的页面,图片一多进去页面就导致应用崩溃闪退。还有就是数据量大的列表,滑动浏览非常不流畅卡顿。通过使用wkwebview插件替换uiwebview的使用,亲测在app使用中性能提高不是一点半点,崩溃率也大大降低。详细请点击此处查看

    ​ 但是,上述方案有一个遗留问题,就是wkwebview技术实际是使用谷歌webkit的内核,在ios上会有取不到本地沙盒文件的bug。如果在app中使用img标签的方式,展示设备本地图片的话无法展示。我们在项目中的解决方案是写了一个调用原生设备展示图片的插件,,,真是大写的尴尬~~~

    相关文章

      网友评论

          本文标题:ionic2常见问题及解决方案

          本文链接:https://www.haomeiwen.com/subject/ixavvxtx.html