整个项目下来,真正开发时间没有十天,两个前端一个负责后台,一个负责前台。开会的时候自告奋勇了,说要做前台,感觉更有挑战些。这是我的第一个angular项目,做起来非常的顺利。

一、浏览器的兼容性bug总结

1.IE的select选项框出现很臭的下拉,而且使用appearance:none并不能去掉

解决方法:select::-ms-expand{display: none}

2、火狐浏览器出现select出现黑色虚线框,a标签出现黑色虚线

火狐浏览器中select黑框必须使用

select{    blr:expression(this.onFocus=this.blur());}

a:focus{

outline: none;

}

3、在safari中input标签显示不正常

line-height:normal

二、页面权限控制

项目中的权限控制主要分为

1、未登入用户的权限,只有首页,还有两个宣传页的权限

2、免费用户,注册并登入的用户,点击(收费的地方)提示要购买,自己一些模块的不可见

3、收费用户,又分为审核通过与审核未通过,店铺信息填写与为填写的情况

权限的控制只有通过ui-route的路由检测来实现

$stateChangeStart这些代码主要是先判断是否已经登入,登入后是否是收费用户,不是收费用户的话,要去的页面的(toState.name)是不允许被跳转的如果是未登录的情况,判断哪些是可以在未登入情况下就可以访问的 也就是formState.name 和 toState.name的值

注意:
 var oHeight=document.documentElement.scrollTop||document.body.scrollTop;    if(oHeight!=0){        window.scrollTo(0,0) }应为angular是单页面的项目,所以当遇到页面比较长的情况下,跳到另外一个页面也是尴尬,还在相应的滚动位置。
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, formState, formParams){    var oHeight=document.documentElement.scrollTop||document.body.scrollTop;    if(oHeight!=0){        window.scrollTo(0,0)    }    if($rootScope.user){        if($rootScope.user.data.user_type==0){            if(toState.name=="app.myDiagnosis"){                $scope.noPaying = true;                event.preventDefault()            }        }    }    if(!$rootScope.user){    if( formState.name == 'access.login' || formState.name == 'access.register'||formState.name == 'access.forgetPwd'||formState.name=='app.proIndex' ||formState.name=='app.classLevel'||formState.name=='app.eliteClass'||formState.name=='app.membersInfo'||formState.name=='app.submitSuccess') {        if(toState.name == 'access.login' || toState.name == 'access.register'||toState.name == 'access.forgetPwd'||toState.name=='app.proIndex' ||toState.name=='app.classLevel'||toState.name=='app.eliteClass'||toState.name=='app.membersInfo'||toState.name=='app.submitSuccess'){

        }else{            // 取消默认跳转行为            $state.go('access.login'); //跳转到登录界面            event.preventDefault();        }    }  //登录页面则不需要监视    // 未登录    }});

三、AngularJS 中利用 Interceptors 来统一处理 HTTP 的错误
var app = angular.module('app', []);// 定义一个 Service ,稍等将会把它作为 Interceptors 的处理函数
app.factory('HttpInterceptor', ['$q', HttpInterceptor]);function HttpInterceptor($q) {return {request: function(config){return config;},requestError: function(err){return $q.reject(err);},response: function(res){return res;},responseError: function(err){if(-1 === err.status) {// 远程服务器无响应} else if(500 === err.status) {// 处理各类自定义错误} else if(501 === err.status) {// ...
      }return $q.reject(err);}};
}// 添加对应的 Interceptors
app.config(['$httpProvider', function($httpProvider){$httpProvider.interceptors.push(HttpInterceptor);
  $httpProvider.defaults.withCredentials = true;    //允许cookie传递
}]);

四、与后台进行交互时,对传入的json转化为aaa="111"&bbb="222"格式
       $httpProvider.defaults.transformRequest = [function(data){/*** The workhorse; converts an object to x-www-form-urlencoded serialization.* @param {Object} obj* @return {String}*/var param = function(obj){var query = '';var name, value, fullSubName, subName, subValue, innerObj, i;for(name in obj){value = obj[name];if(value instanceof Array){for(i=0; i<value.length; ++i){subValue = value[i];fullSubName = name + '[' + i + ']';innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + '&';}}else if(value instanceof Object){for(subName in value){subValue = value[subName];if(subValue != null){// fullSubName = name + '[' + subName + ']';fullSubName = name + '.' + subName;// fullSubName =  subName;innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + '&';}}}else if(value !== undefined ) //&& value !== null
                        {query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';}}return query.length ? query.substr(0, query.length - 1) : query;};return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;}];

四、配上oclazyload后,对应的指令的,服务的配置
    app.config(function($controllerProvider,$compileProvider,$filterProvider,$provide){app.register = {//得到$controllerProvider的引用
                controller : $controllerProvider.register,//同样的,这里也可以保存directive/filter/service的引用
                directive: $compileProvider.directive,filter: $filterProvider.register,service: $provide.service,factory:$provide.factory};})

  这些事大致的框架部分。

接下来是功能实现的方面

一、注册页的60秒倒计时的实现二、各种弹出层的实现三、导师轮播图的实现四、分页插件的实现(资讯页,查看更多)五、支付接口的跳转六、上传excel,校验 ng-file-uoload七、表单的验证八、断网提示、九、videoangular视屏播放十、权限控制渲染十一、自定义滚动条的实现 ng-scroll-bar的实现 (这里要考虑各种因素,数据加载完后div才被撑开)十二、自定义checkbox ,radiobox

转载于:https://www.cnblogs.com/heyinwangchuan/p/6769541.html

“菁英汇项目”(angular)个人总结,以及经验总结相关推荐

  1. 一不小心做出四皇冠淘宝店,她在小类目里找到大商机 | 菁英汇故事

    小商品也有大商机.打造独立品牌,坚持原创,缤纷派对深挖"派对用品"这个细分类目.结缘天下网商菁英汇后,缤纷派对get了不一样的经营技能.让我们来了解一下他们的店铺故事. 意料外的创 ...

  2. 才智汇栖霞,菁英聚智谷——中国(南京)智谷“AI+生物医药”菁英论坛启幕

    创新是动力,人才是根本.6月23日,中国(南京)智谷"AI+生物医药"菁英论坛在南京市栖霞区成功举行.论坛主要围绕人工智能与生物医药产业,就海外高端人才引育策略.路径.方法进行探讨 ...

  3. 图像处理论坛_【活动】CSIG菁英青云论坛第三期活动预告!!

    点击蓝字 关注我们 "CSIG菁英青云论坛"是由CSIG女工委主办的系列网络直播学术活动,诚挚邀请优秀女科技工作者在线进行报告讲座,围绕科研.成长.论文等分享并交流经验. &quo ...

  4. 第八届开源操作系统年度技术会议(OS2ATC)在京召开, 百位科技菁英到场共鉴“开源协作”

    中国北京,12月27日--由中国科学院计算研究所主办,清华大学.上海交通大学以及鉴释科技承办的第八届开源操作系统年度技术会议(OS2ATC)在北京正式拉开序幕,百余位业界菁英莅临现场,围绕大会主题&q ...

  5. 高校企业双向赋能,首届飞桨启航菁英计划圆满结束

    近年来,随着大数据.人工智能等新兴技术的迅猛发展,以新经济.新产业为背景的"新工科"概念被重磅提出.与此同时,新工科建设也对人才标准提出了更高的要求,产业迫切需要工程实践能力强.创 ...

  6. 鸿蒙生态菁英难,重磅!华为联合西工大开设“鸿蒙生态菁英班”!

    近日,西工大官方低调发布了一则重磅消息. 为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为联合西北工业大学开设"鸿蒙生态菁英班",旨在培养具有终端专业知识,热爱终端 ...

  7. 鸿蒙生态箐英班,华为联合西北工业大学开设 “鸿蒙生态菁英班”: 50 人左右,锁定终端软件领域...

    7月5日消息 西北工业大学官方近期宣布,为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为联合西北工业大学开设 "鸿蒙生态菁英班",旨在培养具有终端专业知识,热爱终端 ...

  8. 华为鸿蒙生态班怎么上,华为联合西北工业大学开设“鸿蒙生态菁英班”: 50 人左右...

    原标题:华为联合西北工业大学开设"鸿蒙生态菁英班": 50 人左右 IT之家7月5日消息 西北工业大学官方近期宣布,为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为 ...

  9. 全智贤​成为FILA菁英运动代言人;欧莱雅静华大厦新园区落户上海 | 知消

    上海浦东美术馆开馆,Seesaw Coffee作为唯一官方合作品牌入驻.7月8日,上海浦东美术馆正式向公众开放.与此同时,位于美术馆一楼的Seesaw浦东美术馆店也正式开业.这座Seesaw美术馆门店 ...

最新文章

  1. duilib设置滚动条自动滚动到底
  2. 第5课 开心的金明《聪明人的游戏:信息学探秘.提高篇》
  3. asp.net中通过HyperLinkField传值
  4. gan通过python实现_python通过requests库实现爬虫(二)
  5. MIT算法圣经书《算法导论》第四版
  6. MIPS处理器 CPU控制信号
  7. 2019第一季度工作总结
  8. 嵌入式开发培训多长时间?嵌入式课程怎么学?
  9. 串口线的交叉直连之痛
  10. linux上安装NVIDIA显卡驱动以及深度学习需要的cudn、cudnn、pytorch
  11. 十年之后的人工智能会是什么样
  12. otter实现数据同步,otter manger的安装
  13. sublime教程html5,SublimeText开发html网站教程(一)
  14. 验证darknet中前处理做图像缩放(双线性内插值法)scale的算法效果
  15. CMMI-3级kpa
  16. 小米4C刷openwrt
  17. 施一公 学生如何提高专业英文阅读能力
  18. mysql接受表单数据类型_PHP如何接收表单数据数组并插入MySQL数据库?其中表单数据类型包括图片文件类型,要实现图片..._慕课问答...
  19. 【自语】如何前后端的web及移动都打通?
  20. 02 KVM安装虚拟化

热门文章

  1. 版权费用外流,中国音乐产业被境外唱片公司收割?
  2. MySQL 大作业实训考试题_2020系统综合实践 期末大作业 15组
  3. 基于PHP的学生管理系统设计与实现
  4. 什么是Moodle?
  5. mtk 5.1版本霍尔开关驱动的调试
  6. 最全的DevOps工具集合,再也不怕选型了!
  7. 用python爬取历史天气数据
  8. 复仇者联盟4影评数据分析
  9. html点击展开盒子变大,JS实现点击按钮控制Div变宽、增高及调整背景色的方法
  10. 陶瓷电容,钽电容,铝电解电容对比