ionic项目中遇到的一些问题和处理方法

1.计时函数

var promise = $interval(function(){
    console.log(123);
},3000);
$scope.$on('$destroy',function(){
    $interval.cancel(promise);
})
1
2
3
4
5
6

2.ios中禁止数字自动提示成电话号码,在index.html中添加

<meta name="format-detection" c />
1

3.获取手机屏幕的高宽

var availWidth = parseInt($(window).width());
var availHeight = parseInt($(window).height());
1
2

4.http中post请求格式

http中post请求格式

var configHeader1={
   headers: {
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    }
}

var data = {act: 'act_my_bonus'}

$http.post(URL+"person.php?token="+window.localStorage.getItem("loginSessionId"),{"data": JSON.stringify(data)},configHeader1);
1
2
3
4
5
6
7
8
9

5.ion-refresher和ion-infinite-scroll调用多次的问题

一个页面上,我同时使用了ion-refresher和ion-infinite-scroll用来下拉刷新当前数据以及到底自动获取下一页内容。

偶然发现当ion-refresher下拉刷新之后,页面内容刷出来的一瞬间,infinite的方法被调用了多次,因为页面内容当时还没刷出来,列表一片空白,所以此时页面其实就是已经默认到了最底部了,于是就触发了获取下一页的方法

解决方法也很简单,就是设置一下immediate-check的值

<ion-infinite-scroll ng-if="!noMorePage" immediate-check="false" on-infinite="queryNext()" distance="1%"></ion-infinite-scroll>
1

这个设置官方解释是

Whether to check the infinite scroll bounds immediately on load

就是设置是否在页面加载后立刻触发on-infinite的方法,设为false后,则只有滚动到页面边缘时才会触发,即使页面加载出来已经到最底部,不滚动一下的话也是不会触发的

至于$scope.$broadcast('scroll.refreshComplete');和$scope.$broadcast('scroll.infiniteScrollComplete'); 广播下拉刷新和滚动触发的停止事件就不多说了,官方都有说明

6.list点击跳转后返回,list滚动到了顶部

list跳转后返回无法保持原位置,而是回到了页面顶部,设置如下可解决

ion-content元素上的overflow-scroll="true"
1

7.设置字体的大小有区别

设置字体的大小,考虑到像素问题,太小了,肉眼看不清楚,android和ios设置的值有时候会有区别,设置的字体小于浏览器最小值时会出现这种情况

8.ionic打包过程中的一点bug,原因是构建工具太高级导致的错

ionic打包过程中的一点bug,原因是构建工具太高级导致的错

Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0

解决方法:当是是在更新了最新的SDK之后出现的问题,就尝试降低构建版本,在把buildToolsVersion从24.0.0降到23.0.3之后项目就正常了,可以正常运行。

我直接把android sdk目录下的build-tools下的24版本删掉了。

9.安装ionic的一些插件,比如ionic-filters-bar,出现的问题

bower invalid-meta The "name" is recommended to be lowercase, can contain digits, dots, dashes

解决方法:看一哈项目里面的bower.json,把name里面的值是大写的改成小写

Bower : ENOGIT git is not installed or not in the PATH

解决方法:因为bower管理的包的源码都是托管在github网站上,配置Git的路径在系统环境变量,path路径

10.ion-content的阻尼回弹效果没了

ionic v1.2取消了 ion-content 默认的阻尼回弹效果,明明一模一样的代码,就是没有回弹效果,后来发现是版本更新的锅,

也就是说,v1.2之后想要有阻尼回弹效果,需要这么做:

<ion-content overflow-scroll="false" has-bouncing="true"></ion-content>
1

11.ionic从1.7.16升级到2.1.0打包出现问题

WARN: ionic.project has been renamed to ionic.config.json, please rename it.

Uh oh! Looks like you're missing a module in your gulpfile:

Cannot find module 'gulp'

Do you need to run npm install?

解决方法:

npm remove ionic
npm install -g ionic@1.7.16
1
2

12.ionic打包出现Error Cannot find module 'plist-native'

After having cloned a Git repository containing a Ionic app, you need to run these 2 commands in order to install the dependencies:

npm install

// this will install all the Node.js dependencies in the local node_modules folder. The modules considered are the ones listed under dependencies and devDependencies in the Ionic app package.json.
1
2
3
ionic state restore
// this command looks at the cordovaPlugins and cordovaPlatforms attributes in the package.jsonfile to restore the app with those platforms and plugins.
1
2

13.热更新问题总结

热更新对于ios,可能会遇见一定的问题,可能不能安装cordova plugin add cordova-hot-code-push-local-dev-addon,这个安装能可能在Xcode打包的时候会报错,其次资源文件找不到路径的,移除android,ios平台,重新添加,ios上config.xml中图片引用地址是反斜杠,把反斜杠改为斜杠,如果ios上界面不跳转,记住Safari浏览器调试,看报错的地方。

14.英文换成中文--ios系统的设备,对于一些cordova的插件,比如调用相机,相册,系统原生的键盘,日期,有些操作显示的是英文,比如“cancel”,

英文换成中文-------ios系统的设备,对于一些cordova的插件,比如调用相机,相册,系统原生的键盘,日期,有些操作显示的是英文,比如“cancel”,“done”等等。要求需要用中文来显示,XCode打包的时候,

大部分更改语言设置的建议都是在info.plist文件(即项目的info选项)中设置Localization native development region的字段

该字段默认为en即英文,改为china即可将该app内的软件设为中文

ionic

然而,有些app无效……网上很多地方也没有解答和说明

找了很久终于发现,还要在项目的PROJECT -> Info -> Localizations中添加语言包才可以

ionic

15.如果safari中遇到加载资源文件失败,找不到某个资源

file:///var/mobile/Containers/Data/Application/53491A98-DFBD-411E-95E8-D8005B272F0C/Library/Application%20Support/com.jialeme.huidang/cordova-hot-code-push-plugin/2017.02.27-22.21.03/www//css/bootstrap.css.map

Failed to load resource: 在此服务器上找不到所请求的 URL

解决方法:

把bootstrap.css中最后一行/*# sourceMappingURL=bootstrap.css.map */删除即可