内容简介
本书是资深全栈工程师的代表性著作,由拥有丰富经验的国内AngularJS技术专家执笔翻译,通俗易懂、全面深入,是学习AngularJS不可错过的经典之作。无论是出于工作需要,还是好奇心的驱使,只要你想彻底理解AngularJS,本书都会让你感到满意。
目录
- 第1章初识AngularJS1
- 1.1浏览器如何获取网页1
- 1.2浏览器是什么2
- 1.3AngularJS是什么2
- 1.3.1AngularJS有什么不同3
- 1.3.2许可3
- 第2章数据绑定和第一个AngularJSWeb应用4
- 2.1AngularJS中的数据绑定5
- 2.2简单的数据绑定6
- 2.3数据绑定的最佳实践8
- 第3章模块10
- 3.1参数11
- 3.1.1name(字符串)11
- 3.1.2requires(字符串数组)11
- 第4章作用域12
- 4.1视图和$scope的世界12
- 4.2就是HTML而已13
- 4.3作用域能做什么14
- 4.4$scope的生命周期14
- 4.4.1创建15
- 4.4.2链接15
- 4.4.3更新15
- 4.4.4销毁15
- 4.5指令和作用域15
- 第5章控制器16
- 5.1控制器嵌套(作用域包含作用域)18
- 第6章表达式20
- 6.1解析AngularJS表达式20
- 6.2插值字符串21
- 第7章过滤器24
- 7.1自定义过滤器29
- 7.2表单验证29
- 第8章指令简介43
- 8.1指令:自定义HTML元素和属性44
- 8.2向指令中传递数据50
- 第9章内置指令56
- 9.1基础ng属性指令56
- 9.1.1布尔属性56
- 9.1.2类布尔属性58
- 9.2在指令中使用子作用域59
- 第10章指令详解72
- 10.1指令定义72
- 10.1.1restrict(字符串)74
- 10.1.2优先级(数值型)75
- 10.1.3terminal(布尔型)75
- 10.1.4template(字符串或函数)76
- 10.1.5templateUrl(字符串或函数)76
- 10.1.6replace(布尔型)77
- 10.2指令作用域77
- 10.2.1scope参数(布尔型或对象)78
- 10.2.2隔离作用域80
- 10.3绑定策略81
- 10.3.1transclude82
- 10.3.2controller(字符串或函数)84
- 10.3.3controllerAs(字符串)86
- 10.3.4require(字符串或数组)86
- 10.4AngularJS的生命周期87
- 10.4.1编译阶段87
- 10.4.2compile(对象或函数)88
- 10.4.3链接89
- 10.5ngModel90
- 10.5.1自定义渲染92
- 10.5.2属性92
- 10.6自定义验证93
- 第11章AngularJS模块加载95
- 11.1配置95
- 11.2运行块96
- 第12章多重视图和路由98
- 12.1安装98
- 12.2布局模板99
- 12.3路由99
- 12.4$location服务103
- 12.5路由模式105
- 12.5.1HTML5模式105
- 12.5.2路由事件106
- 12.5.3关于搜索引擎索引107
- 12.6更多关于路由的内容107
- 12.6.1页面重新加载107
- 12.6.2异步的地址变化107
- 第13章依赖注入108
- 13.1推断式注入声明109
- 13.2显式注入声明110
- 13.3行内注入声明110
- 13.4$injectorAPI111
- 13.4.1annotate()111
- 13.4.2get()111
- 13.4.3has()111
- 13.4.4instantiate()112
- 13.4.5invoke()112
- 13.5ngMin112
- 13.5.1安装113
- 13.5.2使用ngMin113
- 13.5.3工作原理113
- 第14章服务114
- 14.1注册一个服务114
- 14.2使用服务116
- 14.3创建服务时的设置项118
- 14.3.1factory()119
- 14.3.2service()119
- 14.3.3provider()120
- 14.3.4constant()122
- 14.3.5value()122
- 14.3.6何时使用value()和constant()123
- 14.3.7decorator()123
- 第15章同外界通信:XHR和服务器通信125
- 15.1使用$http125
- 15.2设置对象128
- 15.3响应对象130
- 15.4缓存HTTP请求131
- 15.5拦截器132
- 15.6设置$httpProvider133
- 15.7使用$resource134
- 15.8安装134
- 15.9应用$resource135
- 15.9.1基于HTTPGET方法135
- 15.9.2基于非HTTPGET类型的方法136
- 15.9.3$resource实例137
- 15.9.4$resource实例是异步的138
- 15.9.5附加属性138
- 15.10自定义$resource方法138
- 15.11$resource设置对象139
- 15.12$resource服务141
- 15.13使用Restangular142
- 15.14Restangular简介142
- 15.15安装Restangular143
- 15.16Restangular对象简介144
- 15.17使用Restangular145
- 15.17.1我的HTTP方法们怎么办146
- 15.17.2自定义查询参数和头147
- 15.18设置Restangular147
- 第16章XHR实践153
- 16.1跨域和同源策略153
- 16.2JSONP153
- 16.3使用CORS154
- 16.3.1设置154
- 16.3.2服务器端CORS支持155
- 16.3.3简单请求155
- 16.3.4非简单请求156
- 16.4服务器端代理157
- 16.5使用JSON157
- 16.6使用XML158
- 16.7使用AngularJS进行身份验证159
- 16.7.1服务器端需求159
- 16.7.2客户端身份验证160
- 16.8和MongoDB通信165
- 第17章promise168
- 17.1什么是promise168
- 17.2为什么使用promise169
- 17.3Angular中的promise170
- 17.4链式请求173
- 17.4.1all(promises)174
- 17.4.2defer()174
- 17.4.3reject(reason)174
- 17.4.4when(value)174
- 第18章服务器通信175
- 18.1自定义服务器端175
- 18.2安装NodeJS175
- 18.3安装Express176
- 18.4调用API178
- 18.5使用AmazonAWS的无服务器应用181
- 18.5.1DynamoDB181
- 18.5.2简单通知服务(SNS)181
- 18.5.3简单队列服务(SQS,SimpleQueueService)182
- 18.5.4简单存储服务(S3)182
- 18.5.5安全令牌服务(STS)182
- 18.6AWSJS+Angular182
- 18.7开始182
- 18.8介绍184
- 18.9安装184
- 18.10运行185
- 18.11用户认证/鉴权186
- 18.12UserService190
- 18.13迁移到AWS上191
- 18.14AWSService194
- 18.15在Dynamo上开始196
- 18.16$cacheFactory196
- 18.17保存currentUser197
- 18.18上传到S3199
- 18.19处理文件上传201
- 18.20查询Dynamo203
- 18.21在HTML显示列表204
- 18.22出售我们的作品205
- 18.23使用Stripe206
- 18.24使用Firebase的无服务器应用209
- 18.25使用Firebase和Angular的三方数据绑定210
- 18.26从AngularFire开始211
- 18.26.1注册并创建一个Firebase211
- 18.26.2包含Firebase和AngularFire库212
- 18.26.3把Firebase作为依赖项添加212
- 18.26.4绑定模型到FirebaseURL212
- 18.26.5数据同步213
- 18.27在AngularFire中排序214
- 18.28Firebase事件215
- 18.29显式同步215
- 18.30用AngularFire进行认证216
- 18.31认证事件217
- 18.31.1$logout()218
- 18.31.2$createUser()218
- 18.32使用Firebase托管部署你的Angular应用218
- 18.32.1安装Firebase工具218
- 18.32.2部署你的Web站点219
- 18.33除了AngularFire之外219
- 第19章测试220
- 19.1为什么要做测试220
- 19.2测试策略220
- 19.3开始测试220
- 19.4AngularJS测试的类型221
- 19.4.1单元测试221
- 19.4.2端到端测试222
- 19.5开始222
- 19.6初始化Karma配置文件223
- 19.7配置选项226
- 19.8使用RequireJS231
- 19.9Jasmine233
- 19.9.1细则套件233
- 19.9.2定义一个细则233
- 19.10预期234
- 19.10.1内置的匹配器234
- 19.10.2安装和卸载237
- 19.11端到端的介绍238
- 19.11.1选项输入244
- 19.11.2重复循环元素244
- 19.12模拟和测试帮助函数245
- 19.13模拟$httpBackend246
- 19.14测试一个应用251
- 19.14.1测试路由252
- 19.14.2测试页面内容255
- 19.14.3测试控制器257
- 19.14.4测试服务和工厂259
- 19.14.5测试过滤器263
- 19.14.6测试模板264
- 19.14.7测试指令266
- 19.15测试事件269
- 19.16对Angular的持续集成270
- 19.17Protractor270
- 19.18配置272
- 19.19配置选项273
- 19.20编写测试275
- 19.21测试实践278
- 19.21.1我们的应用278
- 19.21.2测试的策略279
- 19.22建立我们的第一个测试279
- 19.23测试输入框281
- 19.23.1测试列表282
- 19.23.2测试路由284
- 19.24页面对象285
- 第20章事件287
- 20.1什么是事件287
- 20.2事件传播287
- 20.2.1使用$emit来冒泡事件288
- 20.2.2使用$broadcast向下传递事件288
- 20.3事件监听289
- 20.4事件对象289
- 20.5事件相关的核心服务290
- 20.5.1核心系统的$emitted事件290
- 20.5.2核心系统的$broadcast事件290
- 第21章架构292
- 21.1目录结构292
- 21.2模块293
- 21.3控制器294
- 21.4指令296
- 21.5测试296
- 第22章Angular动画297
- 22.1安装297
- 22.2它是如何运作的297
- 22.3使用CSS3过渡298
- 22.4使用CSS3动画300
- 22.5交错CSS过渡/动画301
- 22.5.1交错CSS过渡301
- 22.5.2交错CSS动画302
- 22.5.3什么指令支持交错动画302
- 22.6使用JavaScript动画302
- 22.7微调动画303
- 22.8DOM回调事件304
- 22.9内置指令的动画304
- 22.9.1ngRepeat动画304
- 22.9.2ngView动画306
- 22.9.3ngInclude动画308
- 22.9.4ngSwitch动画310
- 22.9.5ngIf动画312
- 22.9.6ngClass动画314
- 22.9.7ngShow/ngHide动画316
- 22.10创建自定义动画318
- 22.10.1addClass()319
- 22.10.2removeClass()320
- 22.10.3enter()321
- 22.10.4leave()322
- 22.10.5move()323
- 22.11与第三方库集成324
- 22.11.1Animate.css324
- 22.11.2TweenMax/TweenLite324
- 第23章digest循环和$apply326
- 23.1$watch列表326
- 23.2脏值检查327
- 23.3$watch328
- 23.4$watchCollection330
- 23.5页面中的$digest循环330
- 23.6$evalAsync列表331
- 23.7$apply332
- 23.8何时使用$apply332
- 第24章揭秘Angular334
- 24.1视图的工作原理335
- 24.1.1编译阶段335
- 24.1.2运行时336
- 第25章AngularJS精华扩展337
- 25.1AngularUI337
- 25.2安装337
- 25.3ui-router337
- 25.3.1安装337
- 25.3.2事件342
- 25.3.3$stateParams343
- 25.3.4$urlRouterProvider344
- 25.3.5创建一个导航程序345
- 25.4ui-utils346
- 25.4.1安装347
- 25.4.2mask347
- 25.4.3ui-event347
- 25.4.4ui-format348
- 第26章移动应用350
- 26.1响应式Web应用350
- 26.2交互350
- 26.2.1安装350
- 26.2.2ngTouch351
- 26.2.3$swipe服务352
- 26.2.4angular-gestures和多点触控手势353
- 26.2.5安装angular-gestures354
- 26.2.6使用angular-gestures354
- 26.3Cordova中的原生应用程序355
- 26.4Cordova入门356
- 26.4.1Cordova开发流程359
- 26.4.2平台359
- 26.4.3插件359
- 26.4.4构建360
- 26.4.5模拟和运行360
- 26.4.6开发阶段360
- 26.4.7Anguar中的Cordova服务361
- 26.5引入Angular362
- 26.6使用Yeoman构建363
- 26.6.1修改Yeoman以便使用Cordova364
- 26.6.2装配Yeoman构建365
- 26.6.3构建移动部分365
- 26.6.4处理引导程序367
- 第27章本地化369
- 27.1angular-translate369
- 27.2安装369
- 27.3教你的应用一种新语言370
- 27.4多语言支持371
- 27.5运行时切换语言372
- 27.6加载语言373
- 27.7angular-gettext374
- 27.8安装374
- 27.9用法375
- 27.10字符串提取375
- 27.11翻译字符串377
- 27.12编译新语言378
- 27.13改变语言379
- 第28章缓存381
- 28.1什么是缓存381
- 28.2Angular中的缓存381
- 28.2.1$cacheFactory简介381
- 28.2.2缓存对象382
- 28.3$http中的缓存382
- 28.3.1默认的$http缓存382
- 28.3.2自定义缓存383
- 28.4为$http设置默认缓存384
- 第29章安全性385
- 29.1严格的上下文转义:$sce服务385
- 29.2URL白名单387
- 29.3URL黑名单388
- 29.4$sceAPI388
- 29.4.1getTrusted388
- 29.4.2parse389
- 29.4.3trustAs389
- 29.4.4isEnabled390
- 29.5配置$sce390
- 29.6可信赖的上下文类型390
- 第30章AngularJS和IE浏览器391
- 30.1Ajax缓存393
- 30.2AngularJS中的SEO393
- 30.3使Angular应用可被索引393
- 30.4服务端393
- 30.4.1hashbang语法394
- 30.4.2HTML5路由模式394
- 30.5服务端处理SEO的选项394
- 30.5.1使用Node/Express中间件395
- 30.5.2使用Apache重写URL395
- 30.5.3使用Ngnix代理URL396
- 30.6获取快照396
- 30.7使用Zombie.js获取HTML快照397
- 30.8使用grunt-html-snapshot398
- 30.9Prerender.io399
- 30.10<noscript>方法400
- 第31章构建AngularChrome应用401
- 31.1了解Chrome应用401
- 31.1.1manifest.json401
- 31.1.2背景脚本401
- 31.1.3视图401
- 31.2构建你的Chrome应用402
- 31.3搭建框架402
- 31.4manifest.json403
- 31.5tab.html404
- 31.6在Chrome中加载应用405
- 31.7主模块406
- 31.8构建主页406
- 31.9使用Wundergroud的天气API408
- 31.10设置界面411
- 31.11实现用户服务413
- 31.12城市自动填充/自动完成415
- 31.13添加时区支持418
- 第32章优化Angular应用421
- 32.1优化什么421
- 32.2优化$digest循环421
- 32.3优化ng-repeat423
- 32.4优化$digest调用423
- 32.5优化$watch函数424
- 32.5.1bindonce425
- 32.5.2$watch函数的自动优化427
- 32.6优化过滤器427
- 32.6.1不变的数据427
- 32.6.2过滤后的数据427
- 32.7页面加载优化技巧428
- 32.7.1压缩429
- 32.7.2利用$templateCache429
- 第33章调试AngularJS430
- 33.1从DOM中调试430
- 33.1.1scope()431
- 33.1.2controller()431
- 33.1.3injector()431
- 33.1.4inheritedData()431
- 33.2调试器431
- 33.3AngularBatarang432
- 33.3.1安装Batarang432
- 33.3.2检查模型433
- 33.3.3检查性能433
- 33.3.4检查依赖图表434
- 33.3.5可视化应用434
- 第34章下一步435
- 34.1jqLite和jQuery435
- 34.2了解基本工具436
- 34.3Grunt436
- 34.4grunt-angular-templates439
- 34.4.1安装439
- 34.4.2用法440
- 34.4.3可用选项440
- 34.4.4用法442
- 34.5Lineman443
- 34.6Bower445
- 34.6.1安装445
- 34.6.2Bower简介445
- 34.6.3配置Bower446
- 34.6.4搜索程序包447
- 34.6.5安装程序包447
- 34.6.6使用程序包447
- 34.6.7移除程序包448
- 34.7Yeoman448
- 34.7.1安装448
- 34.7.2用法449
- 34.7.3创建路由451
- 34.7.4创建控制器451
- 34.7.5创建自定义指令451
- 34.7.6创建自定义过滤器451
- 34.7.7创建视图451
- 34.7.8创建服务452
- 34.7.9创建装饰器452
- 34.8配置Angular生成器452
- 34.8.1CoffeeScript452
- 34.8.2安全压缩452
- 34.8.3跳过索引452
- 34.9测试应用452
- 34.10打包应用453
- 34.11打包模板453
- 第35章总结456
本书是资深全栈工程师的代表性著作,由拥有丰富经验的国内AngularJS技术专家执笔翻译,通俗易懂、全面深入,是学习AngularJS不可错过的经典之作。无论是出于工作需要,还是好奇心的驱使,只要你想彻底理解AngularJS,本书都会让你感到满意。
三年前,我跟风买了这本书,想好好学习angularjs我从没想过中间会因为某种原因被打断,又翻了一遍已经是17年的开始。
编排比《angularjs高级程序设计》好,每章简洁易读。但是,缺点也很明显有些地方写错了,译者没有要求很好的理解,也没有在准确理解的基础上进行翻译结果,有些地方全是废话。但总的来说,这两本书各有利弊,我是一起看的。
书里有很多代码,起不到任何作用您需要自己下载代码才能看到它这是胡扯。
有些地方缺乏深度,但比《angularjs高级程序设计》更精准,备受好评。
AngularJS的入门书,看完能快速上手Angular,但是感觉对原理性的东西讲解得不多,想要深入原理最好还要去看《Build your own Angular》