UC九游 天猪(atian25) http://atian25.github.io https://github.com/atian25 AngularJS 进阶实践 UC九游 天猪(atian25) http://atian25.github.io https://github.com/atian25.

Slides:



Advertisements
Similar presentations
“ 上海市科研计划课题预算编制 ” 网上教程 上海市科委条财处. 经费预算表 表 1 劳务费预算明细表 表 2 购置设备预算明细表 表 3 试制设备预算明细表 表 4 材料费预算明细表 表 5 测试化验与加工费预算明细表 表 6 现有仪器设备使用费预算明细表 小于等于 20 万的项目,表 2 ~表.
Advertisements

平台的优点: ( 1 )永久免费: 学校和老师使用校讯通平台发送短信 是免费的,并且通过使用平台,可获得部分购物卡补贴。 ( 2 )移动办公: 校讯通不受时间和空间的限制,只要 有一台可以上网的电脑,老师便可以通过互联网发送短信 给家长,能够实现移动办公,节省老师的工作时间。 ( 3 )简单易用:
大教育家孔子 年 1 月 11 日,一座总高为 9.5 米的孔 子青铜雕像在国家博物馆北广场落成。 2011 年 1 月 11 日,一座总高为 9.5 米的孔 子青铜雕像在国家博物馆北广场落成。
2013年华兴教育 广州中考志愿填报分析.
开远市第一中学 2014年高考志愿填报指导会 2014年6月26日.
世界读书日 4月23日.
大学生创业实践.
社交礼仪.
成功八步 成功一定有方法 失败一定有原因 银河系统.
古诗鉴赏 (常用答题方法 ).
損益表 原則: 收益與費用的計算,實際上是在實現或發生時所產生,與現金收付當時無關。
无锡商业职业技术学院 机电工程学院党总支孙蓓雄
《中国共产党发展党员工作细则》 学习提纲 中共进贤县委组织部 宋 剑
严格发展程序,提高工作能力 黄 玉 2010年9月.
发展党员的流程和要求 党委组织部 萧炽成.
眼影的学习.
第三课 氓.
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
梦想的力量 博湖一小 赵秀珍. 梦想的力量 博湖一小 赵秀珍 读课文,你有什么感受和体会,相互交流一下。还可以把自己想到的写下来。 瑞恩的梦想是什么?他是怎样实现自己的梦想的? 梦想的力量是什么? 读课文,你有什么感受和体会,相互交流一下。还可以把自己想到的写下来。
云南财经大学2010年党员发展培训—— 党员发展工作培训 校党委组织部 2010年9月17日.
2、加一笔成新字 一 →二 二 →三、干、工 十 →土、士 口 →日、中 日 →目、白、田 月 →用 目 →自 木 →禾、本 大 →天、太、犬 人 →大、个 了 →子.
教育年鉴条目的撰写.
常州市戚墅堰实验中学 虞超群 执教 《诗经》选读 卫风·氓.
作文训练: 突出中心.
愛情直播不NG -破解戀愛迷思 嘉南藥理科技大學 學生輔導中心.
莫让情感之船过早靠岸 兴庆回中 赵莉.
《老年人权益保障》 --以婚姻法.继承法为视角
行政公文写作 第七章 2004年8月 行政公文写作.
四组制作: 许顺楠、姬少丽、李澎、刘伏、 徐娅丽、李頔
论文撰写的一般格式和要求 孟爱梅.
贴近教学 服务师生 方便老师.
负 债 第九章 主讲老师:潘煜双 方正为人,勤慎治学.
类 别 发 展 成 就 农业 的 发展 手工业的发展 商业的 繁荣 粮食作物 经济作物 纺织业 制瓷业 造船业 商业都市 对外贸易 货币
第三章 幼儿园课程内容的编制与选择.
第八章 诉讼法 第一节 诉讼法概述 第二节 民事诉讼法 第三节 行政诉讼法 第四节 刑事诉讼法.
优卡会介绍资料 ——健 康 数 据 管 理 专 家—— ——爱上优卡会,生活好品味
第三章  电话、电子通讯   本章重难点:     打电话的方法、         接听电话的方法。
义务教育课程标准实验教科书二年级下册 玲玲的画 山东滨州市无棣县棣丰街道中心小学 曹雪敏. 生活中有些事真有意思!要是肯动 脑筋,坏事也能变成好事;要是肯动脑 筋,看来不可能办成的事也能办成。碰 到问题,我们要认真想想,找到解决问 题的办法,做个善于思考的孩子。
歌咏对象是谁? 1)志洁行廉,爱国忠君真气节; 辞微旨远,经天纬地大诗篇。 2)翁去八百载,醉乡犹在; 山行六七里,亭影不孤。 3)刚直不阿,留得正气冲霄汉; 幽愁发愤,著成信史照尘寰。 4)世上疮痍,诗中圣哲; 人间疾苦,笔底波澜。 屈原 欧阳修 司马迁 杜甫.
项羽之死 司马迁.
第三章 古代汉语语法 3—1古汉语语法及其研究 一、《马氏文通》以前的《古汉语研究》
词 五 首.
《社交礼仪分享》 阳晨牧业科技有限公司 市场中心 二O一二年四月十八日.
你 今 天 累 吗 ? 坪山高级中学心理教师 张婧乔.
第一章 神话.
会议文书.
高考哲学十种主观题常见题型及分析.
— —1998年全世界诺贝尔获奖者集会巴黎时的宣言
如何写入团申请书.
重点字词: 1、吾党之小子狂简 3、暴虎冯河 5、无所取材! 6、予所否者,天厌之 8、子哭之恸.
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
你的潜能是无限的 ——高三心理辅导.
国家体育总局 自行车击剑运动管理中心 国家队
用智慧塑造形象 以修炼打造“合金” ——谈学生干部的形象塑造与核心竞争力
UC九游 天猪(atian25)
第11周 工作计划.
16 葡萄沟.
一九九四年九月五日.
YEOMAN安装 -- AngularJS
一元一次方程式的意義 一元一次方程式的解 等量公理與移項法則 自我評量.
第九章 結 帳 9-1 了解結帳的意義及功能 9-2 了解虛帳戶結清之會計處理 9-3 了解實帳戶結轉的會計處理
网页计费优质业务申请说明 ***公司.
認識多項式 1 多項式的加法 2 多項式的減法
网页设计与制作 Jiangxi Engineering Vocational College 信息工程系 徐卫红.
中国大连高级经理学院博士后入站申请汇报 汇报人:XXX.
行動應用App基本資安檢測實驗室 檢測服務說明
內部控制作業之訂定與執行 報告人:許嘉琳 日 期:
Web前端开发 第17章:AngularJS 阮晓龙 /
8的乘法口诀 导入 新授 练习.
Presentation transcript:

UC九游 天猪(atian25) http://atian25.github.io https://github.com/atian25 AngularJS 进阶实践 UC九游 天猪(atian25) http://atian25.github.io https://github.com/atian25

摆脱思维定势 深入理解框架 性能陷阱 AngularJS进阶

摆脱思维定势 传统前端开发思维 新一代前端开发思维 以JQuery为代表 以DOM为中心 关注VIEW层的变化和用户操作 摆脱思维定势  传统前端开发思维 新一代前端开发思维 以JQuery为代表 以DOM为中心 关注VIEW层的变化和用户操作 「我有这样一个DOM,我想让它做XX」 以AngularJS为代表 以Data为中心 聚焦于数据的变更 MVW = Model + View + WhatEver 推荐阅读: http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background 翻译版本: http://blog.jobbole.com/46589/

请回忆一下 ... 实现一个下拉框(三级+级联) ,需要多少时间? 实现一个表格(分页+过滤+排序+编辑),需要多少时间? 请回忆一下 ... 实现一个下拉框(三级+级联) ,需要多少时间? 实现一个表格(分页+过滤+排序+编辑),需要多少时间? 实现一个树形菜单(可缩展+级联选择),需要多少时间? 实现一个购物车(商品展示+加入/移除购物车+修改数量+实时计算总价) ,需要多少时间? ngnice.com/showcase/#/table/local?utm_source=TZ ngnice.com/showcase/#/tree/checkbox?utm_source=TZ ngnice.com/showcase/#/integrated/cart?utm_source=TZ

实现一个下拉框(三级+级联) JQuery程序猿 AngularJS攻城狮 10行! 分别监控下拉框A/B/C的change事件 http://www.ngnice.com/showcase/#/select/cascade?utm_source=TZ JQuery程序猿 AngularJS攻城狮 分别监控下拉框A/B/C的change事件 在事件中,取得下级的引用 查询符合上级筛选条件的下级数据 循环,更新下级的数据,更新下下级的数据 ... 定义下拉框A的数据源和model 定义下拉框B的数据源和model 在$watch里更新model引用 怎么也要百来行吧? 10行!

实现一个表格 分页 过滤 排序 编辑 JQuery程序猿 AngularJS攻城狮 用第三方组件吧,自己写累死人 80行! http://www.ngnice.com/showcase/#/table/local?utm_source=TZ JQuery程序猿 AngularJS攻城狮 用内置ngRepeat渲染 用内置filter过滤器过滤 用内置orderBy排序 使用自定义paging分页 无第三方组件,手写几十行代码 用第三方组件吧,自己写累死人 80行!

实现一个树形菜单 级联选择 显示/隐藏 JQuery程序猿 AngularJS攻城狮 用第三方组件吧,自己写累死人 40行! http://www.ngnice.com/showcase/#/tree/checkbox?utm_source=TZ JQuery程序猿 AngularJS攻城狮 用内置ngRepeat渲染 用内置ngClass/ngShow缩展 用内置ngInclude无限嵌套 用内置ngAnimate做动画 用第三方组件吧,自己写累死人 40行!

实现一个购物车 商品展示 加入/移除购物车 修改数量 实时计算总价 JQuery程序猿 AngularJS攻城狮 又得加班了... 60行! http://www.ngnice.com/showcase/#/integrated/cart?utm_source=TZ JQuery程序猿 AngularJS攻城狮 用内置ngRepeat渲染 在表格示例上增加一些展示即可 仅仅操作数据即可 又得加班了... 60行!

摆脱思维定势 - 总结 剁手 !!! 时刻以数据为中心进行思考 再看到乱操作DOM 除了Directive,其他地方决不能操作DOM 摆脱思维定势  - 总结 Thinking in Angular 时刻以数据为中心进行思考 构思数据结构 构思操作逻辑,声明式 双向绑定VIEW,慎用逻辑 忘记「我有这么一个DOM,我想让它实现XXX」 除了Directive,其他地方决不能操作DOM 善于内置指令组合,适当写自定义指令 再看到乱操作DOM 剁手 !!!

Look Inside – 启动过程 浏览器载入HTML,解析成DOM 加载Angular类库 DOMContentLoaded事件中开始bootstrap 寻找 ng-app, 注入服务 编译DOM并链接到对于的scope数据

Look Inside – 执行期 浏览器等待用户事件触发(用户交互,定时器,网络事件…) 浏览器执行事件回调,进入Javascript上下文 Angular在$apply中接管了JS的执行部分 Angular进入$digest循环 Angular进行脏数据检查 批量更新DOM,$digest结束 浏览器开始渲染

Look Inside – 执行期示例 编译期 执行期 Angular解析Directive: input[text] 解析ng-model并为input绑定key事件 为{{vm.name}}建立$watch表达式,进行监听 执行期 用户在input输入按键,触发了浏览器的key事件 事件回调, 进入Javascript上下文 angular接管,在$apply中修改scope的name取值 触发$digest流程 脏数据检测,发现$watch列表中的name值变更 通知对应的处理函数, 更新DOM Angular退出执行上下文,退出Javascript的事件处理函数

Look Inside – Other 脏数据检查 != 轮询检查更新 https://docs.angularjs.org/guide/concepts http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ https://github.com/angular/angular.js/wiki/Understanding-Scopes

性能优化 提速 $digest cycle 尽少的触发$digest 尽快的执行$digest 优化ngRepeat 限制列表个数(filter/page) ngInfiniteScroll 单向绑定 不能超过2000个双向绑定 BindOnce插件 内建支持(1.3.x+) 慎用filter和事件 更多参见:http://atian25.github.io/2014/05/09/angular-performace/

Some Tips - $apply的那些事 永远忘不掉你:「Error: $apply already in progress」 反模式: if (!$scope.$$phase) $scope.$apply(); 理解$apply的场景 需要使用它的场景,很少很少: Directive里面的element.bind WebSocket.on 事件 第三方插件修改DOM或数据后 Workaround:使用$timeout(fn, 0); https://github.com/angular/angular.js/wiki/When-to-use-$scope.$apply() http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

Some Tips – 原型链的坑 理解Scope原型链 https://github.com/angular/angular.js/wiki/Understanding-Scopes 使用controllerAs语法糖 http://www.cnblogs.com/whitewolf/p/3493362.html ngModel必须有「 . 」 避免原型链继承的坑 即不能直接赋值为$scope上的基本类型 需包含一个点,即“userInfo.name"

Some Tips – 装饰模式 使用场景:需要对原生/第三方的Service/Directive进行修改时 http://briantford.com/blog/angular-hacking-core 示例:http://plnkr.co/edit/cLUSw27TuB0iFx6er5l2?p=preview

Some Tips – 动态加载 动态加载controller/service/… 动态加载module 主要原理: 在config期保存$controllerProvider/$provide等引用 监听ngRoute的$routeChangeStart事件 利用route的resolve去动态加载 https://github.com/atian25/angular-lazyload 动态加载module hack module的加载机制 https://github.com/ocombe/ocLazyLoad

Some Tips – 被忽视的ngInit 同一个页面include多个模板,但需要不同的model 多重循环中的$index变量

案例展示 - ngshowcase http://ngnice.com/showcase/?utm_source=TZ https://github.com/angular-cn/ng-showcase/

案例展示 - worktile https://worktile.com/?utm_source=TZ

案例展示 - 2048 http://www.ng-newsletter.com/posts/building-2048-in-angularjs.html

Join us 前端攻城狮 Android liuyong3@ucweb.com 最前沿的技术(Angular + NodeJS) 移动互联网 Android技术痴迷者 加入高大上的游戏平台客户端研发