angularjs注入拦截器实现Loading效果

angularjs作为一个全ajax的框架,对于请求,如果页面上不做任何操作的话,在结果烦回来之前,页面是没有任何响应的,不像普通的HTTP请求,会有进度条之类。

本文通过对httpProvider注入拦截器实现loading。

HTML代码

1
2
3
4
5
<div class="loading-modal modal" ng-if="loading">
<div class="loading">
<img src="<?=$this->module->getAssetsUrl()?>/img/loading.gif" alt=""/><span ng-bind="loading_text"></span>
</div>
</div>

css水平居中和垂直居中

水平居中还是比较好弄的

1
2
3
4
{
margin-left: auto;
margin-right: auto;
}

但是垂直居中就比较麻烦,网上一大推文章都是什么display:table-cell,根本不管用。这里利用position属性可以达到这个目的。

MySQL行锁的使用

大家可能都有这样一种感觉,Web程序在本地调试的时候一切正常,放到线上也基本是正常,但是偶尔会有数据错误的情况,这种情况在订单系统中特别常见,因为大部分的订单状态更新都是有两个路径(浏览器跳转和支付服务器的异步推送消息),当然,最终数据要以异步结果为准,但是问题是,浏览器跳转也需要更新订单状态,当这两种方式在很短的时间内同时到达数据库时(一般在一秒内),如果数据库没有加锁,那这个订单会被处理两次。

说到建立数据表时,涉及到支付的,都要用InnoDB引擎,该引擎支持行锁,支持事务,外键。

文章开始的解决办法就是采用InnoDB对要操作的数据行进行锁定。

android实现圆形带进度条的ProgressBar

android加载图片免不了使用加载进度显示,而android自带的progressBar有局限.

  1. 圆型的progressBar不能显示进度条,只能无限制转圈圈

在coding上部署Yii1.x应用

总的来说,由于没有成熟的资料可以参考,部署过程话费了将近一个小时才成功,现在来分享一下经验。

目录配置

由于Paas禁止了本地写功能,所以,如果不加任何处理的话,Yii会尝试在 protected/runtime 目录下写私有文件,结果是肯定没权限的。

经过查找官方文档发现CApplication有个方法叫setRuntimePath,可以设置运行时目录,那么最重要的一点,这个目录的配置肯定要在入口文件中配置,更改之后的入口文件代码如下:

android datepicker和timepicker显示在一行

android默认的datepicker和默认的timepicker可以放在一行(Linelayout),但是timepicker右边会“挤出”屏幕,尝试设置layout_weight和layout_height对于布局有效,但是控件显示就不完整了。到这一步发现xml不局文件已经处理不了,所以自然想到应该利用java来处理了。

效果图

效果图

布局代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="10dp">

<DatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/datePicker"
android:calendarViewShown="false" />

<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker" />
</LinearLayout>

Angularjs处理后端空数据

Yii1.x DAO中的queryAll方法查询,如果有结果,会返回一个数组,如果没有结果,会返回null。现在分两种情况:

返回空数组

1
2
3
$array = array(
);
echo json_encode($array);

输出为

angularjs遍历空数组&索引数组

今天做开发时发现控制老是报错,虽然不影响使用,但是作为有那么一点“强迫症”的我来说,无法忍受。通过调试发现是ng-repeat对一个空数组遍历出错,另外,[‘ab’,’cd’,’ad’]这样只有值没有键的数组也会遍历出错。

解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
<li class="media" ng-repeat="item in comments track by $index">
<div class="media-body">
<strong></strong>
<p> <br />
<time></time>
<br />
<span ng-if="item.comment_author_url.length>0">
<i class="fa fa-globe"></i>
<a href="" target="_blank"></a>
</span>
</p>
</div>
</li>

特别注意track by $index

IllegalStateException: Can not perform this action after onSaveInstanceState

今天使用Fragment的时候,出现了这个错误 IllegalStateException: Can not perform this action after onSaveInstanceState。查看一下控制台,发现是FragmentManager的commit()方法报错的,看字面意思应该是

onSaveInstanceState这个方法之后不能处理这个操作(指commit())。

因为onSaveInstanceState
方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存完状态后再给它添加Fragment就会出错。解决办法就是把commit()方法替换成 commitAllowingStateLoss()就行了,其效果是一样的。

android使用ImageLoader缓存图片

缓存和异步是两个极大提升用户体验的好东西,android加载图片时的开销还是挺大的,要是不做缓存同步加载,网速不给力的情况下,等个十几秒是有可能的。

今天要说的是一个叫做ImageLoader的库

GITHUB:https://github.com/nostra13/Android-Universal-Image-Loader

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×