填一填用了半个月 ionic 遇到的坑

这篇没什么东西可扯,基本是 Q&A 形式。不定时更新,不用 Ionic 了就不更新。。。


Q: 在 iOS 下使用 cordova-plugin-file-transfer 下载中文名文件失败,提示 Could not create target file

A: encodeURI("包含霸气的中文文件名的 URI")


Q: 应用需要存储较大量数据,原始格式是 json ,存 sqlite 数据库嫌麻烦。

A: lokiJS ,类 mongodb 的 js 内存数据库,配合为 ionic 打造的插件做持久化存储。


Q: 不同 Android 手机上出现字体错位之类的奇怪问题。

A: 使用 Crosswalk 消除不同安卓机上 WebView 的差别,顺便还能提升应用性能。


Q: 在实机上使用 livereload 功能时出现空白、连接失败等情况。

A: 实机上的 livereload 本质是用手机访问电脑上的网站,检查手机和电脑之间的网络连接是否通畅。


Q: gitignore 默认排除了 plugins 文件夹,团队其他人 clone 了项目后缺少插件,一个一个装太麻烦。

A: ionic platform add/remove xxx 以及 ionic plugin add/remove xxx 的时候,Ionic CLI 都在 package.json 中保存了项目的状态。clone 完后可以使用 ionic state restore 命令快速恢复


Q: 在 Ionic(AngularJS) 中使用 Cordova 插件有那么点点不方便。

A: Ionic 的 ngCordova 项目为70多个流行的 Cordova 插件提供了 AngularJS 包装,足以应付绝大多数需求。


Q: 在哪里查看 Ionic 带的所有图标?

A: http://ionicons.com


Q:ionic platform add xxx 时卡住

A: 挂 VPN ,或者丢着睡一觉(不确定是不是网络原因,就遇过两次没深究)


Q: tel:xxxxx sms:xxxxxx mailto:xxxxxx geo:xxxxxx 一类的链接不能唤起其他应用。

A: 在 config.xml 中加入:

<access origin="*"/>
<access origin="tel:*" launch-external="yes"/>
<access origin="sms:*" launch-external="yes"/>
<access origin="mailto:*" launch-external="yes"/>
<access origin="geo:*" launch-external="yes"/>

Q: 跟上 Q 一样,加了还 TM 不行!

A: 再在 config.xml 中加入:

<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>

Q: Android 中调用其他应用打开 applicationDirectory 下的文件时提示路径不存在, iOS 可以。

A: 两个系统策略不一样, Android 中有这个需求简单的办法是参考该页中的 Android 文件系统布局,把文件从 Private 目录复制到 Public 目录下再做操作。


Q: 对 Android 进行远程调试。

A: 打开 Chrome ,地址栏输入 chrome://inspect


Q: 对 iOS 进行远程调试

A: 打开 Safari -> 开发 -> 手机名 -> 应用名


Q: Ionic 的 Modal 是什么鬼?不能给它设定状态么?!

A: 超级弱逼的模态框,因为 uirouter 的限制,给它转状态非常不方便。确定只需要一个页面就能完成的操作才用他。下一 Q 提供个解决办法。


Q: 替代 Modal 的方案

A:$state.go 前记录下当前的 view ,然后禁止下一个 view 记录 backView ,就不会显示后退按钮( Android 硬件后退也不行 )。在需要关闭时,后来加入导航栈的任意 view 中设置 backView 为记录下来的 view ,然后 back 。

// go 的时候
var backHistoryId = $ionicHistory.currentHistoryId();
var backViewId = $ionicHistory.currentView().viewId;
$ionicHistory.nextViewOptions({
  disableBack: true,
  disableAnimate: true
});
$state.go('my-awesome-modal', {backViewId: backViewId});


// back 的时候
var backHistoryId = $ionicHistory.currentHistoryId();
var backView = $ionicHistory.viewHistory().histories[backHistoryId].stack.filter(function (v) {
  return v.stateId === $stateParams.backViewId;
})[0];
$ionicHistory.backView(backView);
$ionicHistory.goBack();

Q: ionic serve 或在实机调试时开启了 livereload 功能时的跨域问题

A:

道理还是因为这两种状态下, APP 实际是在访问电脑上的一个网站,任何指向其他地方的链接都是跨域。实机不开 livereload 则不存在这个问题。

简单的方法就是用实机调试且不开 livereload 。

复杂点的比如设置 Ionic 自带的代理服务器,参考链接。需要详细了解这个问题也可以看一遍。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

大公司都有哪些开源项目之腾讯

1.WeUI 为微信Web服务量身设计 WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知...

5106
来自专栏恰童鞋骚年

Hybrid App移动应用开发初探

  Native App(原生App)是用原生语言(Object-C/Java/C#/....)开发,用户需要下载安装的手机应用。

2562
来自专栏女程序员的日常

SSD固态硬盘的GC与Trim

操作系统:其实并没有删除数据;  事实上,它只是在硬盘前的索引区里标记这块文件占用的区域为无效的,  所以等该区域被擦除后,下次数据将要再次写入的时候,可以写入...

2571
来自专栏魏艾斯博客www.vpsss.net

faststone image viewer-替代 acdsee 的看图软件

2683
来自专栏云计算教程系列

为公益伸出援手,自建 NTP 服务器池

在本教程中,讲述如何设置了自己的时间服务器,并使其成为NTP池项目的成员,为社区服务,现在国内NTP服务器数量还是不够乐观,还是那句话,如果你有位于国内的、长期...

3.6K12
来自专栏更流畅、简洁的软件开发方式

【自然框架】之通用权限(八):权限到字段(列表、表单、查询)

 通用权限想要写的文章目录:(这是第八章) 1、 简介、数据库的总体结构 2、 介绍人员表组 3、 介绍组织结构表组 4、 介绍角色表组 5、 介绍“项目自我描...

2927
来自专栏杨建荣的学习笔记

Django初探(二)

之前写过一篇Django的介绍,简单部署之后就没有深入跟进了。 Django初探 上周末去广州参加技术大会,在往返的飞机上,自己调试了下Django里面的内容。...

3309
来自专栏贺贺的前端工程师之路

React Native  APP 添加自动更新

添加APP的自动,使用的第三方库是:react-native-code-push。新版本使用起来特别简单。添加步骤如下:

781
来自专栏游戏杂谈

使用hta操作nginx停止、重启

新上线的webgame需要做一个官网,做好了并上线了(切割、程序、后台,后台使用是java版本的jeecms),但仅仅是自己家的官网做好了,现在上面的想法是需要...

1731
来自专栏美团技术团队

WebView性能、体验分析与优化

在App开发中,内嵌WebView始终占有着一席之地。它能以较低的成本实现Android、iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的封锁。 然而便...

1K12

扫码关注云+社区

领取腾讯云代金券