Ionic使用interceptor统一处理HTTP请求加载显示

实际上我们会经常使用HTTP请求时候做一个加载提示,但是每次都去写ionicLoading确实很麻烦,我们可以在使用interceptor拦截器做统一的处理。

比如官网介绍的方法:

http://learn.ionicframework.online/formulas/loading-screen-with-interceptors/

通过代码,可以看出来是借助于$rootScope的$broadcast和$on来传播和接收事件,从而控制提示框的显示和隐藏。

事实上,我们也可以通过$injector本身来获取到具体的服务,比如下面的代码:

是不是简单多了,实际使用项目的时候,我偏向于后一种方法,而尽量减少使用$rootScope避免全局变量污染。

Laravel下日志的权限的问题

最近网站老是当掉,于是先去storage/logs下看了下日志,发现日志里面只有一条信息,于是又去查看了系统日志,发现了在提示“laravel-log-20161030 have no permission to xxx”,

于是又回到了storage/logs目录下,发现了今天刚生成的日志的用户和用户组都是root,而前面生成的日志都是apache和apache,突然想到了自己刚加过计划任务,而计划任务的执行权限应该是root用户,所以生成的日志也是root用户生成,而应用是apache用户跑的,所以自然没有权限来读取日志。

那么解决办法呢,在bootstrap/app.php 里添加如下代码:

Android Studio 提示 Unsupported method: AndroidProject.getPluginGeneration()的解决方法

升级了Android Studio的工程到gradle 2.0后,在编译工程的时候提示以下错误:

UnsupportedMethodException
Unsupported method: AndroidProject.getPluginGeneration().
The version of Gradle you connect to does not support that method.
To resolve the problem you can change/upgrade the target version of Gradle you connect to.
Alternatively, you can ignore this exception and read other information from the model.

出现这个问题的原因是新版本的Android Studio会检查“ Instant Run” 这个特性,所以解决办法就是关掉这个检查。

Windows & Linux:

File -> Settings -> Build, Execution, Deployment -> Instant Run.

Mac:
Android Studio -> Preferences -> Build, Execution, Deployment -> Instant Run.

 

Android6.0下的权限请求问题

运行一个应用的时候在其他系统上跑的是正常的,但是放到一个Andriod6.0的机子上就直接闪退了,

看了下日志,发现这句提示

ATAL EXCEPTION: mainProcess: ..****, PID: 12847java.lang.SecurityException: Sending SMS message: uid 10092 does not have android.permission.SEND_SMS

根据提示,应该是说我没有SEND_SMS权限,于是去检查了AndroidManifest.xml,发现已经加过了

为什么会出现这个问题呢,原因在于Android6.0后针对没有root的机器有更加严格的权限控制请求。具体权限列表如下:

ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ADD_VOICEMAIL
BODY_SENSORS
CALL_PHONE
CAMERA
GET_ACCOUNTS
PROCESS_OUTGOING_CALLS
READ_CALENDAR
READ_CALL_LOG
READ_CELL_BROADCASTS
READ_CONTACTS
READ_EXTERNAL_STORAGE
READ_PHONE_STATE
READ_SMS
RECEIVE_MMS
RECEIVE_SMS
RECEIVE_WAP_PUSH
RECORD_AUDIO
SEND_SMS
USE_SIP
WRITE_CALENDAR
WRITE_CALL_LOG
WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE

当然解决办法也有3种:

1)修改编译的版本为23.0以下 例如

targetSdkVersion 21

2)舍弃IMEI 的获取方式,更换为获取mac

3) 使用checkSelfPermissionrequestPermissions检查和请求权限

如果为了提升体验,也可以提示对话框让用户进行选择。

Ionic下如何修改popover的尺寸大小

使用popover默认的情况下,如果仅靠使用stype=height:100px 这样是无法进行控制的,而且在android设备下还会出现遮挡的情况。

关于这个问题官方论坛上也有讨论:

https://forum.ionicframework.com/t/popover-sizing/8251/20

最终也有人给出了具体的方案:

定义如下样式:

然后在使用popover的html代码添加fit的class属性即可。

这里有一个ionic在不同平台下popover样式的demo,大家可以参考代码看一看

如何修改Android Studio的Gradle版本

Android Studio 编译的时候报以下错误:

  • What went wrong:
    A problem occurred evaluating project ‘:app’.
    Failed to apply plugin [id ‘com.android.application’] Gradle version 2.10 is required. Current version is 2.8. If using the gradle wrapper, try editing the distributionUrl in /Users/tuo3/git/H5F5FDBE7/gradle/wrapper/gradle-wrapper.properties to gradle-2.10-all.zip

实际上提示已经很明显了,需要更新Gradle版本为2.10

解决办法:

Windows下:

** File > Settings > Builds,Execution,Deployment > Build Tools > Gradle >Gradle home path **

Mac OS下:

** Android Studio > Preferences > Builds,Execution,Deployment > Build Tools > Gradle >Gradle home **

或者我们可以修改工程目录下的gradle-wrapper.properties文件,例如你的工程\gradle\wrapper\gradle-wrapper.properties

然后添加下面的一行:

js设置函数参数默认值的3种方法

js默认是不支持funtion f($a=a){}这种写法的,如果想设置函数参数的默认值,可以参考如下三种方法:

  • 第一种方法:

使用arguments,函数所有的参数都会存入arguments数组离去,所以我们可以从中获取相应的参数然后赋值

  • 第二种方法

使用运算符 ||,这个等同于if(a){a=xx}的写法

  • 第三种方法

使用jquery扩展,适合参数较多的情况下

js将字符串日期格式化为yyyy-mm-dd

参考如下代码

使用方法:

console.log(formatDate('Sun May 13,2016'));

输出:

2016-05-13

2014-05-11

c3js提示Uncaught TypeError: Cannot read property ‘getItem’ of undefined的解决方法

使用c3js的data.onclick事件的时候,在控制台捕获了以下错误:

Uncaught TypeError: Cannot read property ‘getItem’ of undefined`

其实这是一个bug,在最新的0.4.11版本已经修复了这个问题

解决方法就是更新到0.4.11或者参考这条pull进行修改:

issue:https://github.com/c3js/c3/issues/1566
pull:https://github.com/c3js/c3/pull/1564/

国庆环太湖骑行

其实在这次出行之前还是比较纠结的,一方面受台风影响据说国庆的天气状况不是很理想,另一方面,2个小妞的发烧感冒都还没有好,所以也担心这样的天气出去会不会加重,但是想想如果再不出去,后面天气更冷了,就更没机会出去了,所以决定还是“冒一冒险”,继续我们的第二次亲子长途骑行。

骑行路线:杭州-湖州-宜兴-常州-无锡-苏州-吴江-桐乡-杭州

骑行时间:2016/10/1-2016/10/6

骑行距离:450公里

骑行人:Jason.z,Yuan,Annie,Ammie

Day1:杭州-德清-湖州

骑行距离:87公里

骑行数据

由于前一天东西没有收拾好,所以早上起来收拾东西耽搁了很多时间,加上吃早饭,一直弄到9点半才出发,其实很担心天气状况不太好,因为出发前天气很阴沉,想下雨,但是后来骑着骑着,太阳竟然出来了,看来老天爷再次要眷顾我们了。

上午的骑行还算顺利,因为这一路上都基本上平路,无非要应对的是逆行过来的电动车,偶尔有几个大桥爬爬,当然还有一个最重要的问题是由于线路复杂,不得不动用手机导航,刚开始我们用的是苹果自带的导航,所以默认的她给出的是驾车路线,所以这也导致我们多骑了大约有10公里的路程。所以直到下午1点多才到达德清的乾元镇,这个乾元镇看起来挺大,不过到处都在装修,找个吃饭的地儿都找了半天。

出发前自拍1

出发前自拍2

江南水乡桥多

下午果断换成了百度导航,里面有骑行线路指引,刚从乾元出来的一段路很烂,颠簸了很久,后来竟然把我们带入了乡间小道,这一路旁边都是稻田池塘,感觉特别有情调。不过后来最终还是回到G104国道上去,上了G104之后离湖州还有20公里,这一段坡度比较长,骑的稍微辛苦些,晚上大约7点左右到达酒店,不过这酒店房间实在是太小了,车子都很难放下了,楼下就是大家推荐的周生记,然后去品尝了一下,价格比较公道,但是味道一般,不过卤鸡爪很好吃(虽然是甜的)。

乡间小道

听取蛙声一片

林荫小道

看到湖州标志了

小朋友们对电话机还是喜欢

喂喂喂!

Day2 湖州-长兴-宜兴

骑行距离:75公里

骑行数据

早上起来还是去了周生记,因为附近没看到吃早点的地方,然后出发后,一路往北,穿过湖州市区,来到了太湖边上,到达了传说中的“马桶盖”酒店(其实真名是月亮湾酒店),这里却是很不错,但是人也非常多,我们没有停留很长时间,拍了几张照片就匆匆离开了,然后正式开始环湖了。

看到了

近照

这猴哥挺像的

从月亮湾酒店过来,就是真正的沿湖骑行,我们也才开始一睹太湖的芳容了,太湖水虽然不蓝,但是真的是大,一眼望过去全是水,小朋友貌似也没有太兴奋,只是一直问湖边正在捕大闸蟹的人们在干嘛。刚开始这一段沿湖路线非常棒,左边是高大的白杨树,右边就是太湖,所以骑起来感觉很好,既清凉又开阔,后来小朋友们下去玩得都不想走了。

无边无际

最喜欢叶子了

父女三

母女三

在湖边休息完整之后,我们决定继续前进,虽然湖边的风景美如画,然而接下来的路程似乎变得艰难起来,一方面再没有林荫了,另一方面这湖边的风实在是太大了,逆风骑行实在是很累,更重要的是两个小妞被吹的鼻涕流个不停,实在是有些心疼,就这样,一直骑到夹蒲镇,这条沿湖道路才算结算,最终又回到了G104上,这中途还遇到一队骑友,当时喊我们停下来休息,我们没有理会,后来他们又追上了,原来是要和我们合照,有点儿尴尬。

风景如画

到江苏界了,就是这群哥们要和我们合照

加油,离宜兴还有30公里

接下来的30公里骑的也不轻松,因为走得全部都是几个大坡,加上风大,感觉有点儿快吃不消了,就连路过龙背山国家森林公园也没有进去看看,离酒店还有1公里的时候,担心的事情还是发生了,园的后胎爆了,不过还好没多少路就一直坚持到酒店,七天酒店的设施还是可以的,还送了早餐,只不过貌似会员价要比艺龙上订得便宜。晚上的时候竟然下雨了,只得在楼下肯德基解决晚餐了,修车的地方也去不了了。

陶瓷博物馆

旁边都是一些石雕,很好看

Day3:宜兴-常州-无锡

骑行距离:65公里

原本睡觉前还在纠结明天如果下雨怎么办,但没想到早上起来了发现路面竟然干了,于是在酒店用完餐后,就赶到路人指点的修车地方,第一次见到修车的女师傅,看着2个店还带修车,强啊。不过修完车之后,竟然开始下雨了,而且貌似还不小。但是既然选择了远方,就便风雨无阻,所以干脆就先骑骑看吧,于是我们一行4人又是冒着小雨出发了。

冒雨骑行中

今天的行程貌似不远

这场小雨并没有持续太久,雨后的山间的道路格外清新,骑行的道路也很开阔,所以这一段路我们骑的灰常地开心,中午的时候就骑了30公里左右,在一个位于宜兴,常州和无锡交接的镇上吃了快餐。休息了一会儿,天气竟然变晴了,但是太阳不是很大,所以我们决定继续出发,早点儿到达。

现在吃饭都要点饮料

一个石雕市场

后面的一半的路况还是可以的,除了一两个大坡需要推上去,中途还遇到一对长途骑行的父子(小孩应该只有7,8岁吧),给他们远远点了个赞,这一路也有不少景点,但是无奈这国庆期间,人实在是太多了,所以就没有凑热闹去了。就这样,一路也没多歇,下午5点就到达酒店了,不过这格林豪泰设施真的是差,很多东西都坏了,就此被我拉黑了,晚上去楼下了传说中的无锡小笼,肉太多了,和生煎包差不多,不过馄饨不错哦。

太湖湾旅游度假区

路况不错

到无锡了

这是啥地方?

无锡城缩影

Day4:无锡-苏州-吴江

骑行距离:65 公里

原来是准备今天骑行到吴江市区,第二天去园弟家,但是她弟一直让我们早点儿过去,所以我们商量决定,今天晚上不住吴江了,一直骑行到芦墟。只不过从酒店到芦墟镇有90多公里,所以内心还是有点二担心是不是要夜骑,更倒霉的是,出门的时候发现园的车后胎 好像还是有点儿不正常,所以又去补了一下,结果弄到将近10点才出来。不过这道路貌似比前几天的都要好骑的很多,1个多小时就骑出了无锡,下午1点就骑到了苏州市区。只不过事先没有调查过苏州的小吃,所以就随便找了个酒店吃了顿午餐。

到苏州了

稻城?

两小妞在饭店也能玩得这么嗨!

吃完饭后,继续往前走,基本上是贯穿了整个苏州城区吧,苏州应该还是不错的城市吧,国庆来的人也很多,就一个寒山寺,门口的车都排了几公里远。我们还是下次再来好好玩吧,过了苏州就是吴江了,这个时候已经下午4点多,距离芦墟镇还有30公里,园她弟非要开车过来接,说是已经在路上了,盛情难却,我们就骑到了汽车站等他们过来,不过他们来的也很及时,刚到就开始下雨了,想想也是幸运啊。到了弟弟家,大妞和小妞很快就和哥哥还有外公玩起来了,

吴江欢迎你

终于看到哥哥了

终于可以泡澡了

Day5 芦墟-乌镇-桐乡

骑行距离:80公里

骑行数据

原来想在弟弟家休整一天再出发的,但是看了天气预报貌似未来几天的天气状况并不是很好,为了不像上次留下遗憾,所以我只得忍痛然让孩子们提前分别了,再次踏上行程,不过万万没想到,我们走的竟然是g318,无数骑友都梦想的朝圣之路,不过这一路并无风景,加上路况不错,所以我们骑得很快。临近中午的时候,到达震泽古镇,在这里吃饭休憩。

朝圣之路

这里有无数人的故事

震泽古镇

正在被开发中

因为今天要绕到乌镇去看看,所以吃完饭就立即出发了,后面的道路没多大难度,无非就是爬几个大桥,只不过骑了半天发现还是在吴江市范围内,直至过了一段修路的地方才看到“浙江界”这几个字。

刚开始以为过了这个桥就是浙江界了

what??

这才是浙江界~

过了这个界牌,其实离乌镇也没多远了,只不过这边的入口竟然被交通管制了,所以只得从小道进入了,国庆的乌镇也是游客爆棚,到了门口也告知自行车无法入内,所以只得拍了张照片,到此一游吧。

乌镇老街

乌镇新街

乌镇入口

再会乌镇

既然看不了乌镇,所以索性就早点儿骑到了桐乡,订了一家三星的酒店,各方面都还不错的,价格也实惠,晚上去了小时代餐厅,里面的菜还是不错,就是份量少了点儿。

不好好吃饭1

不好好吃饭2

Day 6: 桐乡-临平-杭州

骑行距离:65公里

骑行数据

本以为今天可以开开心心的回去,不过这骑行体验实在是太差了,因为前半程的路实在是太差了,我们一度骑出了越野的感觉,后面还有各种修路,灰尘特别大,加上各种逆行电动车,汽车,这内心的是崩溃的。快到中午的时候到了临平,也没有去找地方吃饭,就干脆把剩余的零食全部干掉了,一直骑到家里,老天爷真是给面子,就是快到家的时候淋了下雨,于是赶紧冲了个热水澡,晚上又到楼下的粗菜馆吃一顿,这次的骑行也算结束了。后半程的路上实在没风景,所以也没拍照片。

这是国道?

到余杭了

我已经等不及了

我也等不及了!

总结

由于有了上次的骑行经验,所以这次的骑行整体来说都是比较顺利的,不过也有几个建议供大家参考。

1、其实整体上环湖路线也是比较成熟的路线,骑行难度也不是很大,顺时针逆时针都可以。

2、如果你的时间有限,可以选择坐车到湖州之类的,因为从杭州-湖州,桐乡-杭州这段其实都没啥风景的。

3、格林豪泰酒店已经不再我的出行住宿酒店考虑范围内了。