ionic开发App-问题收集总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq673318522/article/details/53236521

总结

使用ionic开发App算是告一段落了。使用前端的技术来统一移动端,不得不承认这个听起来很酷。JavaScript要统一世界的节奏。
然而现实并不是这样,使用ionic开发App虽然在开发速度上比原生开发快很多(有AngularJS的基础上,1~2个礼拜熟悉ionic框架,一个月左右做完App),但依然存在下面这个几个比较致命的问题:
1. App流畅度不足,用户体验差。尤其是在Android4.4以下的手机,性能更是惨不忍睹。iOS上流畅度则相对会好很多。所以尽量控制每个页面的复杂度。
2. 长列表性能不佳。这点在此次开发的App倒不是很明显,因为公司的业务并不涉及大量的数据展示。
3. 可定制化不高。所有的行为都只能基于ionic框架的基础去实现,可玩性不高,难以实现个性化定制。
4. 插件问题。在ionic中,跟原生设备打交道都只能通过cordova插件这一种方式。常用的几个基本插件都有了成熟的解决方法及用法,但是如果遇到比较冷门的需求,在没有找到插件的情况下,只能自己写插件或者考虑其他解决办法了。这次开发过程中就遇到了这个坑,App需要对接连连支付,后面还是在github上找到了一个连连支付插件,最后通过更改插件源代码才能用到App上,实现了对接连连支付。

虽然存在着致命缺点,但是依然不能忽略ionic的优点。每种技术存在都有其价值与市场。ionic最大的优点便是可以在低成本的情况下,快速地开发出一款并不是最完美但是依然可以使用的App。
下面便是在开发过程中所遇到的部分问题

ionic tab在Android中显示在顶部的解决方案

解决办法:
在 iOS中, tabs 一直处于底部. 在android中 ionic tabs 一直在顶部,如果要改我们可以通过配置$ionicConfigProvider。代码如下:

.config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider) {

        $ionicConfigProvider.platform.ios.tabs.style('standard');
        $ionicConfigProvider.platform.ios.tabs.position('bottom');
        $ionicConfigProvider.platform.android.tabs.style('standard');
        $ionicConfigProvider.platform.android.tabs.position('standard');

        $ionicConfigProvider.platform.ios.navBar.alignTitle('center');
        $ionicConfigProvider.platform.android.navBar.alignTitle('left');

        $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');
        $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');       

        $ionicConfigProvider.platform.ios.views.transition('ios');
        $ionicConfigProvider.platform.android.views.transition('android');

参考资料

http://bbs.phonegap100.com/thread-1495-1-1.html


ionic 隐藏底部菜单栏

可以参考我之前写的文章:ionic 隐藏底部菜单栏

ionic如何后退

ionic提供了$ionicHistory来访问访问历史以及返回。其中$ionicHistory.goBack([backcount])就是用来回退视图。
其中backcount指定了回退多少个视图,默认为-1,即回退一个视图。
参考资料:

http://ionichina.com/topic/569a5f8458c6c76d17fde189

ionic在装载ion-view的时候如何隐藏ion-nav-header

这种问题属于API掌握不够熟练。
只需为ion-view添加属性:hide-nav-bar=“true”即可实现隐藏父ion-nav-bar

ionic App打包成apk,在手机打开的时候,会出现下面的错误:

the connection to the server was unsuccessful. (file ///android_asset/www/index.html)  

这一般是由于www/index.html下的index.html文件找不到。可能是编译没成功导致的。

$ionicHistory.clearHistory无效

有时候会出现 ionicHistory.clearHistory timeout()

$timeout(function () {
          $ionicHistory.removeBackView();
          $ionicHistory.clearCache();
          $ionicHistory.clearHistory();
        });

禁止ion-view页面的缓存

cache-view = false即可

如何更改ion-header-bar颜色

参考文章:

http://stackoverflow.com/questions/30015413/

change-ion-view-header-color-in-ionic

  1. You could add the ion-nav-bar to each view.
<ion-view view-title="Page 1">
  <ion-nav-bar class="bar-balanced">
    <ion-nav-back-button></ion-nav-back-button>
  </ion-nav-bar>
  <ion-content>
  </ion-content>
</ion-view>
  1. You could also update the background-color (and any other properties) by using ng-style
    Main navbar:
<ion-nav-bar class="bar-positive" ng-style="{'background-color': viewColor}">
    <ion-nav-back-button></ion-nav-back-button>
  </ion-nav-bar>

CSS:

.nav-bar-block, .bar {
  background-color: inherit !important;
}

Controller:

$scope.$on('$ionicView.beforeEnter', function() {
    $rootScope.viewColor = 'green';
});

ionic隐藏后退按钮上的文字

可以采用CSS和js配置两种方式
CSS方式

/*隐藏后退按钮文字*/
.bar .buttons .back-text {
  display: none !important;
}

js方式:在config()中添加


$ionicConfigProvider.backButton.previousTitleText(false);

如何给ion-header-bar添加自定义点击事件

首先设置ion-view的hide-nav-bar=true,然后自定义ion-header-bar

<ion-view    class="container"   title=""  hide-nav-bar="true">
 <<ion-header-bar >
 <button class="button back-button buttons button-assertive button-clear header-item" ng-click="goBack()">
   <i class="icon ion-ios-arrow-thin-left"></i>
 </button>
 <h1 class="title fund-title" ng-click="toggleQueryModal()">账户-资金记录**
 </h1>
</ion-header-bar>
</ion-view>

如何退出App

ionic.Platform.exitApp()

在使用$ionicPlatform.ready()方法时,在真机中偶尔会出现没有监听到的情况,导致一些cordova事件无法被执行比如registerBackButtonAction

参考资料:

https://github.com/driftyco/ionic/issues/1751

解决办法将cordova.js移到页面最底部。

move cordova.js to end of body tag

ionicPlatform.ready()webViewcordovawindow.onloadcordova.js ionicPlatform.ready()。

ionic如何更改包名

找到根目录下的config.xml,其中<widget id='com.package.name'>便是你的包名。更改之后,再用命令cordova build android重新构建App即可。

ionic中如何打开微信(或者其他应用)

使用协议weixin://

<a class="button button-block button-light" href="weixin://">打开微信</a>

然后在根目录下的config.xml中配置:

<access origin="weixin:*" launch-external="yes"/>  //打开微信的

ionic.Platform.exitApp()退出后,再进入应用 splashscreen不显示

在config.xml文件里添加

<preference name="SplashShowOnlyFirstTime" value="false" />

ionic 签名后的问题

问题描述:

ionic can't access http after generate  signed release apk

可能的解决办法:

1add whitelist in confix.xml
cordova plugin add cordova-plugin-whitelist --save

ionic 键盘挡住input框

参考资料:

https://forum.ionicframework.com/t/scroll-to-the-focused-item-input-when-the-keyboard-is-up/422

cordova设置签名的apk不验证服务器端的ssl证书

参考资料

http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/

在测试APK的时候,如果后端API为https的,而且在测试服的https证书是非正式的话,会导致测试版apk无法发起http请求。解决办法便是更改ssl验证。
Android端需要更改文件
CordovaWebViewClient.java
代码如下:

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  final String packageName = this.cordova.getActivity().getPackageName();
  final PackageManager pm = this.cordova.getActivity().getPackageManager();

  ApplicationInfo appInfo;
  try {
    appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
    if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
      // debug = true
      handler.proceed();
      return;
    } else {
      // debug = false
      // THIS IS WHAT YOU NEED TO CHANGE:
      // 1. COMMENT THIS LINE
      // super.onReceivedSslError(view, handler, error);
      // 2. ADD THESE TWO LINES
      // ---->
      handler.proceed();
      return;
      // <----
    }
  } catch (NameNotFoundException e) {
    // When it doubt, lock it out!
    super.onReceivedSslError(view, handler, error);
  }
}

该文件的位置:
Cordova v4 及其以下: project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java
Cordova v5 及其以上: project/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java

ionic 动态设置title,或者自定义title

ionic中设置title可以直接使用,ion-view。

<ion-view view-title="title">
</ion-view>

但是这种方式只适合静态的title。但是如果要动态设置title的话,特别是当要设置的title是由http请求的数据时,上面的方式就无法显示title。可以用ion-nav-title替换:


<ion-view >
<ion-nav-title>
{{yourTitlte}}
</ion-nav-title>
</ion-view>

在Controller中的代码

$timeout(function(){
    $scope.yourTitle = data;    
})

关于ion-view中的view-title属性,官方定义如下:

A text-only title to display on the parent ionNavBar. For an HTML title, such as an image, see ionNavTitle instead.

也就是说view-title只能用来设置text-only title,对于其他类型的title如图片等,要用ionNavTitle替换。同理,如果title是个变量,也应该使用ionNavTitle
参考资料:

https://www.raymondcamden.com/2015/12/18/is-your-ionic-view-title-not-updating/

ionic 点击系统返回提示退出确认框

可以参考我写的文章:【ionic App问题总结系列】点击系统返回键退出App

ionic登录拦截机制的实现

可以参考这篇文章:ionic登录拦截机制-使用Modal作为登录框

ionic插件相关

怎么在ionic中打开网页

使用inappbrowser插件便可实现。
http://stackoverflow.com/questions/34342172/post-a-form-in-a-new-window-inappbrowser-in-ionic-cordova/34357114

怎么在ionic中使用cordova plugin

监听事件deviceready,然后在该事件监听中调用你所需要的插件。

document.addEventListener("deviceready", function () {
 if (window.LLPay) {
   if (!Passport.authStatus()) {
     AuthService.updateUserInfoAfterAuth($scope.recharge.full_name, $scope.recharge.id_no);
   }
   window.LLPay.startPay($scope.arguments, function (data) {
   }, function (err) {
   });
 }
})

如果你不知道插件的名字是什么,可以去插件所在的位置的plugin.xml:plugins/your-plugin/plugin.xml中找到如下的代码,其中clobbers中target属性便是你在js中调用该插件的方法名字。

<js-module src="www/inappbrowser.js" name="inappbrowser">
   <clobbers target="cordova.InAppBrowser.open" />
   <clobbers target="window.open" />
</js-module>

ionic微信分享

可以参考我写的文章:【ionic App问题总结系列】ionic微信朋友圈分享

ionic App更新

可以参考我写的文章: 【ionic App问题总结系列】ionic 如何更新App版本

文章首发于我的个人博客: www.iamsuperman.cn

猜你喜欢

转载自blog.csdn.net/qq673318522/article/details/53236521
今日推荐