1. 不要重置对象的引用!(重置只应该在组件或服务的初始化时) why:会使页面产生闪烁
  2. 不要给图片绑定一个空的值或空的图片引用(如果值从服务器异步过来,那应该在初始化时给它一个默认值)why:会触发一个404的请求 (如:img src=http://xxxx/null)
  3. 页面全部使用最新的angular2写法,on-click=>(click) bind-src=>[src] bind-html=>[innerHtml]

规范:

  • 拆分模型和控制器(保持“瘦”控制器,“胖”模型的原则【界面交互在控制器里,业务逻辑都封装在模型里】)

代码写法技巧:

  • if else 嵌套最多两级,减少代码逻辑层级【优化阅读】。  
    例子:

            queryCard.success = function (data) {
    console.log(data);
    that.pageInfo.bindCardList = JSON.parse(data);
    if (that.pageInfo.bindCardList == null || that.pageInfo.bindCardList.length <= 0) {
    that.viewInfo.isbindedCard = false;
    }
    else {
    that.viewInfo.isbindedCard = true;
    for (let entry of that.pageInfo.bindCardList) {
    var cardStr = entry.card_no.split(' ').join('');
    if (cardStr.length != 20 && cardStr.length != 13) {
    continue;
    } if (cardStr.length == 20) {
    entry.card_no = cardStr.substr(0, 5) + " " + cardStr.substr(5, 5) + " " + cardStr.substr(10, 5) + " " + cardStr.substr(15, 5);
    } else {
    entry.card_no = cardStr.substr(0, 5) + " " + cardStr.substr(5, 5) + " " + cardStr.substr(10, 3);
    }
    //构造弹窗信息
    if (entry.is_default == 0) {
    entry["isSelect"] = 0;
    that.pageInfo.inputCardNo = entry.card_no;
    that.getCardLLInfo();
    } else {
    entry["isSelect"] = 1;
    }
    }
    }
    };

    =>

    queryCard.success = function (data) {
    console.log(data);
    that.pageInfo.bindCardList = JSON.parse(data);
    if (that.pageInfo.bindCardList == null || that.pageInfo.bindCardList.length <= 0) {
    that.viewInfo.isbindedCard = false;
    return;
    }
    that.viewInfo.isbindedCard = true;
    for (let entry of that.pageInfo.bindCardList) {
    var cardStr = entry.card_no.replace(" ",""); // <= split(' ').join(''); 其实应该把没有空格的值单独保存,很多地方都在使用它
    if (cardStr.length != 20 && cardStr.length != 13) {
    continue;
    }
    ......

      

  • 尽量杜绝常量的使用【优化阅读】
    例子:
    <button *ngIf="item.activity_status == " class="btn btn-locate baidu" opt="N-去领取"
    =>

    <button *ngIf="item.activity_status == PKGActivityStatus.normal" class="btn btn-locate baidu" opt="N-去领取"
  • 变量和函数命名清晰,不含糊或生僻(不用太在意名字长度,如果含义清楚,可以接收)
  • 尽量消除重复代码(又在埋坑)
    如: entry.card_no.split(' ').join('');  或者  cookieService.get("abc");
  • 没用的代码、变量尽早删除
  • 冗余的代码必须精简:

    直接改写成:

        isShowCardListAlert() {
    return !this.viewInfo.isShowCardList
    }

    简化之后,发现,连这个函数都是冗余的:

    再分析,发现连变量【viewInfo.isShowCardList】都是多余的:

    <div class="win-box align-center" [hidden]="true" #winBox>
    <div class="bottom-box">
    <div class="tc-title"><span>切换其他卡</span><span class="close-plan" (click)="winBox.hidden=false">关闭</span></div>
    <div *ngFor="let item of pageInfo.bindCardList">
    ......

    最终控制器代码省掉了一个变量的操作,一整块儿函数!  

  • 定义对象的属性 entry["isSelect"] = 0 改成 entry.isSelect = 0
    还有 

    为什么要用“双引号”,这样连智能感知都被屏蔽了!而且审核代码的人,无法看出你到底是哪个字母写错了,还是多了个空格(巨坑!这个不仅仅是js代码的问题

  • 写代码时,请多为接手你代码的人想想!这种代码(已经无法表达此时的感受):

       =》 

    这段代码.......(不想说话)  还有下面这个:

    请尽量消除重复!!消除重复!消除重复!

  • 为了删除一个
    activity.warningCount 我必须小心翼翼,不知道哪里在使用,不知道,它用来干什么?!
  •  

Angular2 前端代码规范的更多相关文章

  1. Web 前端代码规范

    Web 前端代码规范 最后更新时间:2017-06-25 原始文章链接:https://github.com/bxm0927/web-code-standards 此项目用于记录规范的.高可维护性的前 ...

  2. eslint+prettier+husky+lint-staged 统一前端代码规范

    eslint+prettier+husky+lint-staged 统一前端代码规范 遵循编码规范和使用语法检测,可以很好的提高代码的可读性,可维护性,并有效的减少一些编码错误. 1.终极目标 团队中 ...

  3. idataway_前端代码规范

    1.前后端json对接的规范. 前后端的json代码规范 result ={ success:”true”,//true表示成功,false表示失败. data:{}, //数据 errorCode: ...

  4. Web前端代码规范

    新增:http://materliu.github.io/code-guide/#project-naming HTML 原则1.规范 .保证您的代码规范,保证结构表现行为相互分离.2.简洁.保证代码 ...

  5. Web前端代码规范与页面布局

    一.    规范目的: 为提高工作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,在网站建设中,使结构更加清晰,代码简明有序,有一个更好的前端架构,有利于SEO优化.   二.     ...

  6. web前端代码规范——css代码规范

    Bootstrap CSS编码规范 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 为选择器分组时,将单独的选择器单独放在一行. 为了代码的易读性,在每个 ...

  7. web前端代码规范 - HTML代码规范

    Bootstrap HTML编码规范 本文转载自w3cschool. 由于bootstrap得到了世界的认可,因此,此规范用于规范html代码有一定的说服力. 交流qq群:164858883.欢迎各位 ...

  8. 腾讯alloyteam团队前端代码规范

    来源于:http://alloyteam.github.io/CodeGuide/ 命名规则 项目命名 全部采用小写方式, 以下划线分隔. 例:my_project_name 目录命名 参照项目命名规 ...

  9. 前端代码规范-Javascript

    命名规范 ECMAScript 规范中标识符采用驼峰大小写格式,驼峰命名法由小(大)写字母开始,后续每个单词首字母都大写.根据首字母是否大写,分为两种方式: Pascal Case 大驼峰式命名法:首 ...

随机推荐

  1. layui 时间插件laydate ,取消回调

    背景:转型新公司不再是做前端展示H5之类的东西,主要业务是后台数据读取和插件搭建前端页面,接触的第一个老项目是layui制作的,由于业务需求,需要用到时间插件以下为时间插件的一些用法--------- ...

  2. 那些H5用到的技术(1)——素材加载

    编码环境前言什么时候用到素材加载?loading提示,让用户等待图片的加载音频的加载利用神器PreloadJS总结 编码环境 Sublime Text 3 插件包括: Autoprefixer 自动补 ...

  3. [转]C#算法题

    1:不允许使用循环语句.条件语句,在控制台中打印出1-200这200个数. 参考答案:这里我使用的是递归. static void Main(string[] args) { Print(); Con ...

  4. linux下执行Python项目,crontab不能定时执行任务

    问题描述: 在项目下的文件执行脚本,可以手动执行 在其他文件目录下,手动执行脚本报错误,提示不存在该模块. 解决方法: 文件头加上: import sysimport ossys.path += [ ...

  5. Python爬虫抓取某音乐网站MP3(下载歌曲、存入Sqlite)

    最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分析(必须要弄清楚自己的目的),另外就是要考虑对爬取的数据归类,存储. ...

  6. 在ubuntu下使用Eclipse搭建Hadoop开发环境

    一.安装准备1.JDK版本:jdk1.7.0(jdk-7-linux-i586.tar.gz)2.hadoop版本:hadoop-1.1.1(hadoop-1.1.1.tar.gz)3.eclipse ...

  7. Django多进程日志文件问题

    Django多进程日志文件问题 最近使用Django做一个项目.在部署的时候发现日志文件不能滚动(我使用的是RotatingFileHandler),只有一个日志文件. 查看Log发现一个错误消息:P ...

  8. Windows命令计算MD5与SHA1/256值

    certutil -hashfile file MD5 certutil -hashfile file SHA1 certutil -hashfile file SHA256 示例如下:

  9. Ajax嵌套Ajax的模版

    引入 在开发中,难免会碰到需要发送两次ajax请求或者更多的情况 情境:我们需要resultB数据,后台提供的接口要先传入参数paramA,获取到resultA,然后resultA作为参数,调用另外一 ...

  10. mariadb sequence

    MariaDB 10.3 正式版推出后,有了像 Oracle.PostgreSQL 里的序列特性. 同时表字段AUTO_INCREMENT原特性还保持,但是sequence特性在某些特定情境还是很有用 ...