用AngularJS开发过程中遇到了无数的坑,一路磕磕绊绊走来,满满都是泪...
当然,也乐在其中~
在这里把这些遇到的坑都记录下来,便于日后查找,也给大家提个醒。
AngularJS 中的$http post方法和jQuery中的ajax post方法使用的头信息不同,ng中Content-Type 是application/json,jq中是application/x-www-form-urlencoded,对于PHP来说,jq中的处理比较方便,直接用$_POST就能获取,但是ng默认发送的是json数据,PHP不能直接获取。
解决办法无非两种:从前端(AngularJS)解决和从后端(PHP)解决
(1). 从前端解决:
在ng模块或者config()方法中修改post头信息:
单单修改头信息还不够,还要增加一个拦截器,用于把json数据序列化成 a=123&b=456的格式:
序列化函数(注意如果参数是对象需要递归处理):
(2). 从后端解决(我比较喜欢第二种方法,因为json格式的数据对前端来说很方便)
需要在PHP代码开头加入下面代码:
ng模板中的对象、数组循环功能很强大,但最简单的从1-n的数字循环却实现不了,所以需要自己写一个过滤器
用的时候只需这样:
出于安全考虑,ng-bind 是会把绑定的数据进行HTML转义的,如果想直接输出HTML需要写一个过滤器:
使用过滤器:
假如路由改变、视图刷新时页面不是在顶部位置,则新的视图页面也不在顶部位置,大多数时候我们希望它能自动跳到顶部,可以在模块run()方法中加入下面代码:
用CORS发送跨域请求比JSONP更安全更简洁
在config中加入下面两行:
同时需要服务器配合,PHP中加入:
考虑到有这样一个使用场景:
页面上有两个按钮,点加号增加一个房间,点减号减少一个房间,房间数每发生一次变化都要重新发送一个ajax请求获取最新的房间价格,这个请求是比较耗时而且消耗服务器资源的,如果用户想选择3间房,他需要点击两次“+”号,如果第1次点加号时也发送一次请求是毫无意义的,白白增加服务器压力,而且异步请求也不能保证第2次点加号时的返回一定比第1次点加号时的返回晚,所以还有可能造成价格显示错误,解决办法是设置一个时间戳记录用户上一次请求时间,如果上一次请求时间小于n秒,则不响应用户事件,避免无意义的多次请求。
模板代码: