Skip to content

Commit a756b34

Browse files
committed
Merge pull request #3 from basecss/master
11111111
2 parents c2b4d3d + ded6dbc commit a756b34

6 files changed

+65
-63
lines changed

Diff for: Chapter2.markdown

+10-8
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
## 目录
66

7-
- [启用Angular](#启用angular)
7+
- [启用Angular](#启用Angular)
88
- [加载脚本](#加载脚本)
99
- [使用ng-app声明Angular的界限](#使用ng-app声明angular的界限)
1010
- [模型/视图/控制器](#模型视图控制器)
1111
- [模板和数据绑定](#模板和数据绑定)
1212
- [显示文本](#显示文本)
1313
- [表单输入](#表单输入)
14-
- [不唐突JavaScript的一些话](#不唐突javascript的一些话)
14+
- [无侵入JavaScript的一些话](#无侵入javascript的一些话)
1515
- [列表, 表格和其他重复的元素](#列表-表格和其他重复的元素)
1616
- [隐藏与显示](#隐藏与显示)
1717
- [CSS类和样式](#css类和样式)
@@ -322,11 +322,11 @@
322322

323323
}
324324
```
325-
###不唐突JavaScript的一些话
325+
###无侵入JavaScript的一些话
326326

327-
在你JavaScript开发生涯的某些时刻, 有人可能会告诉你, 你应该编写"不唐突的JavaScript", 在你的HTML中使用`click`, `mousedown`以及其他类似的内联事件处理程序是不好的. 那么他是正确.
327+
在你JavaScript开发生涯的某些时刻, 有人可能会告诉你, 你应该编写"无侵入的JavaScript", 在你的HTML中使用`click`, `mousedown`以及其他类似的内联事件处理程序是不好的. 那么他是正确.
328328

329-
不唐突的JavaScript思想已经有很多解释, 但是其编码风格的原理大致如下:
329+
无侵入的JavaScript思想已经有很多解释, 但是其编码风格的原理大致如下:
330330

331331
1. 不是每个人的浏览器都支持JavaScript. 让每个人都能够看到你所有的内容和使用你的应用程序, 而不需要在浏览器中执行代码.
332332

@@ -486,7 +486,7 @@
486486

487487
这里, `ng-show``ng-hide`用于处理这些工作. 它们基于传递给它们的表达式提供显示和隐藏的功能. 即, 当你传递的表达式为true时`ng-show`将显示元素, 当为false时则隐藏元素. 当表达式为true时`ng-hide`隐藏元素, 为false时显示元素. 这取决于你使用哪个更能表达的你意图.
488488

489-
这些指令通过适当的设置元素的样式为`display: block`来显示元素, 设置样式为`display: none`来隐藏元素. 让我们看以个正在构建的Death Ray控制板的虚拟的例子:
489+
这些指令通过适当的设置元素的样式为`display: block`来显示元素, 设置样式为`display: none`来隐藏元素. 让我们看一个正在构建的Death Ray控制板的虚拟的例子:
490490
```html
491491
<div ng-controller="DeathrayMenuController">
492492
<p><button ng-click="toggleMenu()">Toggle Menu</button></p>
@@ -499,7 +499,9 @@
499499
```
500500
```js
501501
function DeathrayMenuController($scope){
502-
$scope.menuState.show = false;
502+
$scope.menuState = {
503+
show: false
504+
};
503505

504506
$scope.toggleMenu = function(){
505507
$scope.menuState.show = !$scope.menuState.show;
@@ -597,7 +599,7 @@
597599
在模版中, 我们设置`ng-class``{selected: $index==selectedRow}`. 当模型中的`selectedRow`属性匹配ng-repeat的`$index`时设置class为selected. 我们还设置一个`ng-click`来通知控制器用户点击了哪一行:
598600
```html
599601
<table ng-controller="RestaurantTableController">
600-
<tr ng-repeat="restaurant in directory" ng-click="selectRestaurant($index)" ng-class="{selected: $index==selectedRow">
602+
<tr ng-repeat="restaurant in directory" ng-click="selectRestaurant($index)" ng-class="{selected: $index==selectedRow}">
601603
<td>{{restaurant.name}}</td>
602604
<td>{{restaurant.cuisine}}</td>
603605
</tr>

Diff for: Chapter3.markdown

+21-21
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ AngularJS只是你开发实际网页的工具箱的一部分. 在这一节, 我
104104

105105
让我们从你如何编写源代码开始. 有大量的JavaScript编辑器可以选择, 有免费的也有付费的. 长时间以来的事实证明Emacs和Vi是开发JS的最好选择. 现在, 各种IDEs都自带了语法高亮, 自动完成以及其他功能, 它给你一个选择的余地, 这可能是值得的. 那么, 应该使用那一个呢?
106106

107-
如果你不介意付几十块钱(尽管它有一个30天的免费试用期), [WebStorm](www.jetbrains.com/webstorm/‎)是个不错的选择, 当今时代, WebStorm由JetBrains提供了最广泛的Web开发平台. 它所具有的特性, 在之前只有强类型语言才有, 包括代码自动完成(如图3-1所示, 指定浏览器版本), 代码导航, 语法和多无高亮, 同时支持多个库和框架的启动即可使用. 此外, 它还漂亮的集成了在IED中正确的调试JavaScript的功能, 而且这些都是基于Chrome执行的.
107+
如果你不介意付几十块钱(尽管它有一个30天的免费试用期), [WebStorm](www.jetbrains.com/webstorm/‎)是个不错的选择, 当今时代, WebStorm由JetBrains提供了最广泛的Web开发平台. 它所具有的特性, 在之前只有强类型语言才有, 包括代码自动完成(如图3-1所示, 指定浏览器版本), 代码导航, 语法和多无高亮, 同时支持多个库和框架的启动即可使用. 此外, 它还漂亮的集成了在IDE中正确的调试JavaScript的功能, 而且这些都是基于Chrome执行的.
108108

109109
![ide](figure/3-1.png)
110110

@@ -182,14 +182,14 @@ Yeoman让你很简单的使用一个Web服务器服务你所有的静态资源
182182

183183
###Karma
184184

185-
Karma存在的主要的原因是它让你的测试驱动开发(TDD)流程变得简单, 快速和有趣. 它使用NodeJS和SocketIO(你不需要知道它们是什么, 只需要假设它们是很棒很酷的库), 并允许在多个浏览器中及其快速的运行你的代码和测试. 在[https:// github.com/vojtajina/karma/](https:// github.com/vojtajina/karma/)中可以找到更多信息.
185+
Karma存在的主要的原因是它让你的测试驱动开发(TDD)流程变得简单, 快速和有趣. 它使用NodeJS和SocketIO(你不需要知道它们是什么, 只需要假设它们是很棒很酷的库), 并允许在多个浏览器中及其快速的运行你的代码和测试. 在[https://github.com/vojtajina/karma/](https://github.com/vojtajina/karma/)中可以找到更多信息.
186186

187187
> **TDD简介**
188188
>
189189
> 测试驱动开发或者TDD, 是一个通过确保在开发生命周期内首先编写测试的敏捷方法, 这是在代码实现之前进行的, 这就是测试驱动的开发(不只是作为一种验证工具).
190190
>
191191
> TDD的原则很简单:
192-
>
192+
>
193193
+ 代码只需要在一个所需要的代码测试失败时编写.
194194
+ 编写最少的代码以确保测试通过.
195195
+ 在每一步删除重复代码.
@@ -264,7 +264,7 @@ Karma并没有所有最新版和最好的(greatest)IDEs使用的插件(已经实
264264

265265
**在每一个变化上运行测试**
266266

267-
这是许多TDD开发者的理想国: 能够运行在它们所有的测试中, 每次它们按下保存, 在急毫秒之内迅速的得到返回结果. 使用AngularJS和Karma可以很容易做到这一点. 事实证明, Karma配置文件(记住就是前面的`karma.conf.js`)有一个看似无害的名为**`autoWatch`**的标志. 设置它为true来告诉Karma每次运行你的测试文件(这就是你的源代码和测试代码)都监控它的变化. 然后在你的IDE中执行"karma start", 猜猜会怎样? Karma运行结果将可供你的IDE使用. 你甚至不需要切换控制台或者终端来了解发生了什么.
267+
这是许多TDD开发者的理想国: 能够运行在它们所有的测试中, 每次它们按下保存, 在几毫秒之内迅速的得到返回结果. 使用AngularJS和Karma可以很容易做到这一点. 事实证明, Karma配置文件(记住就是前面的`karma.conf.js`)有一个看似无害的名为**`autoWatch`**的标志. 设置它为true来告诉Karma每次运行你的测试文件(这就是你的源代码和测试代码)都监控它的变化. 然后在你的IDE中执行"karma start", 猜猜会怎样? Karma运行结果将可供你的IDE使用. 你甚至不需要切换控制台或者终端来了解发生了什么.
268268

269269
##端到端/集成测试
270270

@@ -298,7 +298,7 @@ Scenario Runner允许你按照类Jasmine的语法来描述应用程序. 正如
298298
b. 添加一个代理服务器将请求定位到正确的测试文件所在目录, 例如:
299299

300300
proxies = {'/': 'http://localhost:8000/test/e2e'};
301-
301+
302302
c. 添加一个Karma root(根目录/基础路径)以确保Karma的源文件不会干扰你的测试, 像这样:
303303

304304
urlRoot = '/_karma_/';
@@ -323,7 +323,7 @@ Angular场景情运行器, 顾名思义, 它是由Angular创建的. 因此, 他
323323

324324
Angular意识也意味着Angular直到所有的XHR何时向服务器放出, 从而可以避免页面加载所等待的间隔时间. 场景运行器直到何时加载一个页面, 从而比Selenium测试更具确定性, 例如, 超时等待页面加载时任务可能失败.
325325

326-
**调试功能**
326+
**调试功能**
327327

328328
探究JavaScript, 如果你查看你的代码不是很好; 当你希望暂停和恢复测试时, 所有的这些都运行场景测试吗? 然而所有的这一切通过Angular场景运行器都是可行的, 等等.
329329

@@ -376,9 +376,9 @@ Angular意识也意味着Angular直到所有的XHR何时向服务器放出, 从
376376
//Some stuff here
377377
}]);
378378
```
379-
一旦所有的变量都混肴或者压缩只有, 这是使用Angular找出那些你最初使用的服务和变量的方式.
379+
一旦所有的变量都混淆或者压缩只有, 这是使用Angular找出那些你最初使用的服务和变量的方式.
380380

381-
> 每次都是数组的方式注入是比较好的处理发方式, 以避免开始编译代码时的错误. 挠头并视图找出为什么提供的$e变量丢失了(一些任务的混肴版本压缩了它)是不值得的.
381+
> 每次都是数组的方式注入是比较好的处理发方式, 以避免开始编译代码时的错误. 挠头并视图找出为什么提供的$e变量丢失了(一些任务的混淆版本压缩了它)是不值得的.
382382
383383
##其他优秀工具
384384

@@ -457,7 +457,7 @@ Figure 3-5. AngularJS properties within Batarang
457457

458458
然后只需按照打印的只是来获取Yeoman.
459459

460-
对于Windows机器, 或者运行它是遇到任何问题, 到[https://github.com/yeoman/yeoman/ wiki/Manual-Install](https://github.com/yeoman/yeoman/ wiki/Manual-Install)并按照说明来安装会让你畅通无阻.
460+
对于Windows机器, 或者运行它是遇到任何问题, 到[https://github.com/yeoman/yeoman/wiki/Manual-Install](https://github.com/yeoman/yeoman/wiki/Manual-Install)并按照说明来安装会让你畅通无阻.
461461

462462
###启动一个新的AngularJS项目
463463

@@ -490,7 +490,7 @@ Figure 3-5. AngularJS properties within Batarang
490490
```bash
491491
yeoman init angular:route routeName
492492
```
493-
因此, 如果你运行`yeoman iniy angular route home`结束之后它将执行以下操作:
493+
因此, 如果你运行`yeoman init angular:route routeName`结束之后它将执行以下操作:
494494

495495
+`app/scripts/controllers`目录中创建一个`home.js`控制器骨架
496496
+`test/specs/controllers`目录中创建一个`home.js`测试规范
@@ -524,7 +524,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
524524

525525
##使用RequireJS整合AngularJS
526526

527-
如果你提单做好更多的事情, 正好会让你的开发环境更简单. 后期修改你的开发环境, 会需要修改更多的文件. 依赖管理和创建包部署是任何规模的项目所忧虑的.
527+
如果你提前做好更多的事情, 正好会让你的开发环境更简单. 后期修改你的开发环境, 会需要修改更多的文件. 依赖管理和创建包部署是任何规模的项目所忧虑的.
528528

529529
使用JavaScript设置你的开发环境是相当困难的, 因为它涉及Ant构建维护, 连接你的文件来构建脚本, 压缩它们等等. 值得庆幸的是, 在不久之前已经出现了像RequireJS这样的工具, 它允许你定义和管理你的JS依赖关系, 以及将他们挂到一个简单的构建过程中. 随着这些异步加载管理的工具诞生, 能够确保所有的依赖文件在执行之前加载好, 重点工作可以放在实际的功能开发, 在此之前从未如此简单过.
530530

@@ -541,7 +541,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
541541
c. /**script**: 主AngularJS代码库. 这个目录也包括我们的引导程序代码, 主要的RequireJS集成
542542

543543
i. /**controllers**: 这里是AngularJS控制器
544-
544+
545545
ii. /**directives**: 这里是AngularJS指令
546546

547547
iii. /**filters**: 这里是AngularJS过滤器
@@ -727,7 +727,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
727727

728728
// web server port
729729
port = 8989;
730-
730+
731731
// cli runner port
732732
runnerPort = 9898;
733733

@@ -740,18 +740,18 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
740740
// enable/disable watching file and executing tests whenever any file changes
741741
autoWatch = true;
742742

743-
// Start these browsers, currently available:
743+
// Start these browsers, currently available:
744744
// - Chrome
745745
// - ChromeCanary
746746
// - Firefox
747747
// - Opera
748748
// - Safari
749749
// - PhantomJS
750-
// - IE if you have a windows box
750+
// - IE if you have a windows box
751751
browsers = ['Chrome'];
752-
752+
753753
// Cont inuous Integrat ion mode
754-
// if true, it captures browsers, runs tests, and exits
754+
// if true, it captures browsers, runs tests, and exits
755755
singleRun = false;
756756
```
757757
我们使用一个稍微不同的格式来定义的我们的依赖(包括: false是非常重要的). 我们还添加了REQUIRE_JS和适配依赖. 最终进行这一系列工作的是`main.js`, 他会触发我们的测试.
@@ -760,7 +760,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
760760

761761
require.config({
762762
// !! Karma serves files from '/base'
763-
// (in this case, it is the root of the project /your-project/app/js)
763+
// (in this case, it is the root of the project /your-project/app/js)
764764
baseUrl: ' /base/app/scr ipts' ,
765765
paths: {
766766
angular: 'vendor/angular/angular.min',
@@ -817,7 +817,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
817817
elem = $compi le('<input type=”text” ngbk-focus>')($rootScope);
818818
}));
819819

820-
it('should have focus immediately', function() {
820+
it('should have focus immediately', function() {
821821
expect(elem.hasClass('focus')).toBeTruthy();
822822
});
823823
});
@@ -836,7 +836,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
836836
值得庆幸的是, RequireJS的处理方式并不会影响我们所有的端到端的测试, 因此可以使用我们目前所看到的方式简单的做到这一点. 一个范例配置如下, 假设你的服务其在http://localhost:8000上运行你的应用程序:
837837
```js
838838
// base path, that will be used to resolve files
839-
// (in this case is the root of the project
839+
// (in this case is the root of the project
840840
basePath = '../';
841841

842842
// list of files / patterns to load in the browser
@@ -858,7 +858,7 @@ Yeoman不支持压缩文件, 但是根据来发者提供的信息, 它很快会
858858

859859
// cli runner port
860860
runnerPort = 9898;
861-
861+
862862
// enable/disable colors in the output (reporters and logs)
863863
colors = true;
864864

Diff for: Chapter4.markdown

+3-3
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ Figure 4-1. Guthub: A simple recipe management application
110110

111111
services.factory('MultiRecipeLoader', ['Recipe', '$q', function(Recipe, q){
112112
return function(){
113-
var delay = $.defer();
113+
var delay = $q.defer();
114114
Recipe.query(function(recipes){
115115
delay.resolve(recipes);
116116
}, function(){
@@ -244,7 +244,7 @@ Figure 4-1. Guthub: A simple recipe management application
244244
```js
245245
// This file is app/scripts/directives/directives.js
246246

247-
var directive = angular.module('guthub.directives', []);
247+
var directives = angular.module('guthub.directives', []);
248248

249249
directives.directive('butterbar', ['$rootScope', function($rootScope){
250250
return {
@@ -255,7 +255,7 @@ Figure 4-1. Guthub: A simple recipe management application
255255
element.removeClass('hide');
256256
});
257257

258-
$routeScope.$on('$routeChangeSuccess', function(){
258+
$rootScope.$on('$routeChangeSuccess', function(){
259259
element.addClass('hide');
260260
});
261261
}

0 commit comments

Comments
 (0)