UC九游 天猪(atian25) https://github.com/atian25

Slides:



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

大教育家孔子 年 1 月 11 日,一座总高为 9.5 米的孔 子青铜雕像在国家博物馆北广场落成。 2011 年 1 月 11 日,一座总高为 9.5 米的孔 子青铜雕像在国家博物馆北广场落成。
2013年华兴教育 广州中考志愿填报分析.
开远市第一中学 2014年高考志愿填报指导会 2014年6月26日.
世界读书日 4月23日.
社交礼仪.
成功八步 成功一定有方法 失败一定有原因 银河系统.
古诗鉴赏 (常用答题方法 ).
損益表 原則: 收益與費用的計算,實際上是在實現或發生時所產生,與現金收付當時無關。
《中国共产党发展党员工作细则》 学习提纲 中共进贤县委组织部 宋 剑
严格发展程序,提高工作能力 黄 玉 2010年9月.
发展党员的流程和要求 党委组织部 萧炽成.
眼影的学习.
第三课 氓.
提升应用内HTML5 的开发和使用体验
梦想的力量 博湖一小 赵秀珍. 梦想的力量 博湖一小 赵秀珍 读课文,你有什么感受和体会,相互交流一下。还可以把自己想到的写下来。 瑞恩的梦想是什么?他是怎样实现自己的梦想的? 梦想的力量是什么? 读课文,你有什么感受和体会,相互交流一下。还可以把自己想到的写下来。
自定义汇总报表 演示 作者:栗川.
2、加一笔成新字 一 →二 二 →三、干、工 十 →土、士 口 →日、中 日 →目、白、田 月 →用 目 →自 木 →禾、本 大 →天、太、犬 人 →大、个 了 →子.
常州市戚墅堰实验中学 虞超群 执教 《诗经》选读 卫风·氓.
作文训练: 突出中心.
愛情直播不NG -破解戀愛迷思 嘉南藥理科技大學 學生輔導中心.
莫让情感之船过早靠岸 兴庆回中 赵莉.
行政公文写作 第七章 2004年8月 行政公文写作.
四组制作: 许顺楠、姬少丽、李澎、刘伏、 徐娅丽、李頔
论文撰写的一般格式和要求 孟爱梅.
Exmobijs框架 场景介绍 使用方法 常用类介绍.
贴近教学 服务师生 方便老师.
網路程式設計-期末專案 資工二B B975701 2 8 黃首翰 ~Rock your life~
负 债 第九章 主讲老师:潘煜双 方正为人,勤慎治学.
类 别 发 展 成 就 农业 的 发展 手工业的发展 商业的 繁荣 粮食作物 经济作物 纺织业 制瓷业 造船业 商业都市 对外贸易 货币
第三章 幼儿园课程内容的编制与选择.
第三章  电话、电子通讯   本章重难点:     打电话的方法、         接听电话的方法。
《社交礼仪分享》 阳晨牧业科技有限公司 市场中心 二O一二年四月十八日.
AngularJS 常虎.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
你 今 天 累 吗 ? 坪山高级中学心理教师 张婧乔.
会议文书.
如何写入团申请书.
你的潜能是无限的 ——高三心理辅导.
用智慧塑造形象 以修炼打造“合金” ——谈学生干部的形象塑造与核心竞争力
第11周 工作计划.
AngularJS -- 使用AngularJS进行开发
第二讲 搭建Java Web开发环境 主讲人:孙娜
SQL Injection.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
By Sizzle引擎研究 By
YEOMAN安装 -- AngularJS
DevDays ’99 The aim of this mission is knowledge..
业绩报告/新年计划 POWERPOINT模板
一元一次方程式的意義 一元一次方程式的解 等量公理與移項法則 自我評量.
A New Kind of JavaScript Library
解决变化问题的自底向上 流程建模方法 严志民 徐玮.
UC九游 天猪(atian25) AngularJS 进阶实践 UC九游 天猪(atian25)
第九章 結 帳 9-1 了解結帳的意義及功能 9-2 了解虛帳戶結清之會計處理 9-3 了解實帳戶結轉的會計處理
2019/4/20 关注NE官方微信,获取更多服务.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
网页设计与制作 Jiangxi Engineering Vocational College 信息工程系 徐卫红.
2019/4/26 关注NE官方微信,获取更多服务.
ES 索引入门
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
中国大连高级经理学院博士后入站申请汇报 汇报人:XXX.
iSIGHT 基本培训 使用 Excel的栅栏问题
行動應用App基本資安檢測實驗室 檢測服務說明
Chapter 18 使用GRASP的对象设计示例.
內部控制作業之訂定與執行 報告人:許嘉琳 日 期:
Visual Basic程序设计 第13章 访问数据库
Delphi 7.0开发示例.
Web前端开发 第17章:AngularJS 阮晓龙 /
WEB程序设计技术 数据库操作.
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

实现一个下拉框(三级+级联) ,需要多少代码? 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攻城狮 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 – ngInclude作用域 常见需求: 同一个页面include多个模板,但需要不同的model 分析: Template中的变量名称一样,但在父模板中要用不同的model 故需要有多级scope,每个template关联到一个scope 方案: ngInit <div ng-include ="'partials/addressform.html'" ng-init="type='billing'"></div> onload <div ng-include ="'partials/addressform.html'" onInclude="type='billing'"></div> Directive scope: true

案例展示 - 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 liuyong3@ucweb.com 前端攻城狮 最前沿的技术(Angular + NodeJS) 移动互联网 Android Android技术痴迷者 加入高大上的游戏平台客户端研发