“教程-英雄编辑器”一审完毕

This commit is contained in:
Zhicheng Wang 2016-05-11 19:46:09 +08:00
parent a870e4401b
commit 0e6820dc0b
1 changed files with 26 additions and 26 deletions

View File

@ -90,7 +90,7 @@ code-example(format="" language="bash").
:marked :marked
Learn more about interpolation in the [Displaying Data chapter](../guide/displaying-data.html). Learn more about interpolation in the [Displaying Data chapter](../guide/displaying-data.html).
了解插值表达式的更多知识,参阅[“显示数据”一章](../guide/displaying-data.html)。 了解插值表达式的更多知识,参阅[“显示数据”一章](../guide/displaying-data.html)。
:marked :marked
### Hero object ### Hero object
### Hero对象 ### Hero对象
@ -98,7 +98,7 @@ code-example(format="" language="bash").
At the moment, our hero is just a name. Our hero needs more properties. At the moment, our hero is just a name. Our hero needs more properties.
Let's convert the `hero` from a literal string to a class. Let's convert the `hero` from a literal string to a class.
此时此刻,我们的英雄还只有一个名字。显然,我们的英雄应该有更多的属性。 此时此刻,我们的英雄还只有一个名字。显然,他/她应该有更多属性。
让我们把`hero`从一个字符串字面量换成一个类。 让我们把`hero`从一个字符串字面量换成一个类。
Create a `Hero` class with `id` and `name` properties. Create a `Hero` class with `id` and `name` properties.
@ -107,36 +107,36 @@ code-example(format="" language="bash").
创建一个`Hero`类,它具有`id`和`name`属性。 创建一个`Hero`类,它具有`id`和`name`属性。
现在,把下列代码放在`app.component.ts`的顶部仅次于import语句。 现在,把下列代码放在`app.component.ts`的顶部仅次于import语句。
+makeExample('toh-1/ts/app/app.component.ts', 'hero-class-1', 'app.component.ts (Hero class)')(format=".") +makeExample('toh-1/ts/app/app.component.ts', 'hero-class-1', 'app.component.ts (Hero)')(format=".")
:marked :marked
Now that we have a `Hero` class, lets refactor our components `hero` property to be of type `Hero`. Now that we have a `Hero` class, lets refactor our components `hero` property to be of type `Hero`.
Then initialize it with an id of `1` and the name, "Windstorm". Then initialize it with an id of `1` and the name, "Windstorm".
现在,有了一个`Hero`类,我们就要把组件`hero`属性的类型换成`Hero`了。 现在,有了一个`Hero`类,我们就要把组件`hero`属性的类型换成`Hero`了。
然后把`1`作为id、把“Windstorm”作为名字,初始化它。 然后以`1`为id、以“Windstorm”为名字,初始化它。
+makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'hero-property-1', 'app.component.ts (Hero属性)')(format=".") +makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'hero-property-1', 'app.component.ts (hero属性)')(format=".")
:marked :marked
Because we changed the hero from a string to an object, Because we changed the hero from a string to an object,
we update the binding in the template to refer to the heros `name` property. we update the binding in the template to refer to the heros `name` property.
我们把hero从一个字符串换成了对象于是我们也得更新模板中的绑定表达式来引用hero的`name`属性。 我们把`hero`从一个字符串换成了对象,所以也得更新模板中的绑定表达式,来引用`hero`的`name`属性。
+makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'show-hero-2') +makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'show-hero-2')
:marked :marked
The browser refreshes and continues to display our heros name. The browser refreshes and continues to display our heros name.
浏览器自动刷新,并继续显示这位英雄的名字。 浏览器自动刷新,并继续显示这位英雄的名字。
### Adding more HTML ### Adding more HTML
### 添加更多的HTML ### 添加更多的HTML
Displaying a name is good, but we want to see all of our heros properties. Displaying a name is good, but we want to see all of our heros properties.
Well add a `<div>` for our heros `id` property and another `<div>` for our heros `name`. Well add a `<div>` for our heros `id` property and another `<div>` for our heros `name`.
能显示名字就算不错了,但是我们还想看到我们这位英雄的所有属性。 能显示名字虽然不错,但我们还想看到这位英雄的所有属性。
我们将添加一个`<div>`来显示英雄的`id`属性,另一个`<div>`来显示英雄的`name`属性。 我们将添加一个`<div>`来显示英雄的`id`属性,另一个`<div>`来显示英雄的`name`属性。
+makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'show-hero-properties') +makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'show-hero-properties')
:marked :marked
@ -153,8 +153,8 @@ code-example(format="" language="bash").
lets take advantage of the template strings feature lets take advantage of the template strings feature
in ES2015 and TypeScript to maintain our sanity. in ES2015 and TypeScript to maintain our sanity.
我们可以通过字符串加法来制作更可读的模板,但这样仍然太难看了 —— 难于阅读,容易出现 我们可以通过字符串加法来制作更可读的模板,但这样仍然太难看了 —— 难于阅读,容易拼错。
这样不行我们要借助ES2015和TypeScript提供的模板字符串来保持清 这样不行我们要借助ES2015和TypeScript提供的模板字符串来保持清
Change the quotes around the template to back-ticks and Change the quotes around the template to back-ticks and
put the `<h1>`, `<h2>` and `<div>` elements on their own lines. put the `<h1>`, `<h2>` and `<div>` elements on their own lines.
@ -174,9 +174,9 @@ code-example(format="" language="bash").
Everything between the back-ticks at the beginning and end of the template Everything between the back-ticks at the beginning and end of the template
is part of a single template string. is part of a single template string.
**小心!**反引号(`)看起来很像单引号('),但它们是截然不同的字符。 **小心!**反引号(`虽然看起来很像单引号('),但它们是截然不同的字符。
反引号能够做的可不只是标记字符串边界。 反引号能做的可不仅仅是标记字符串的边界。
在这里,我们只用它来把我们的模板变成多行的,而涉及更多用途。 在这里,我们只用它来把我们的模板变成多行的,而没有涉及更多用途。
所有被反引号引起来的部分,都是一个单一模板字符串的一部分。 所有被反引号引起来的部分,都是一个单一模板字符串的一部分。
.l-main-section .l-main-section
@ -190,7 +190,7 @@ code-example(format="" language="bash").
Refactor the hero name `<label>` with `<label>` and `<input>` elements as shown below: Refactor the hero name `<label>` with `<label>` and `<input>` elements as shown below:
重构英雄的名字,从单纯的`<label>`到`<label>`和`<input>`元素的组合,就像下面这样: 把英雄的名字从单纯的`<label>`重构成`<label>`和`<input>`元素的组合,就像下面这样:
+makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'editing-Hero', 'app.component.ts (input元素)') +makeExample('toh-1/ts-snippets/app.component.snippets.pt1.ts', 'editing-Hero', 'app.component.ts (input元素)')
:marked :marked
@ -200,8 +200,8 @@ code-example(format="" language="bash").
is not reflected in the `<h2>`. We won't get the desired behavior is not reflected in the `<h2>`. We won't get the desired behavior
with a one-way binding to `<input>`. with a one-way binding to `<input>`.
在浏览器中,我们看到英雄的名字显示为了一个`<input>`文本框。但看起来还是有些不太对 在浏览器中,我们看到英雄的名字显示成一个`<input>`文本框。但看起来还是有点儿不太对劲
当修改名字时,我们的改动并没有反映到`<h2>`中。使用单向数据绑定,我们没法实现所期望的行为。 当修改名字时,我们的改动并没有反映到`<h2>`中。使用单向数据绑定,我们没法实现所期望的这种行为。
### Two-Way Binding ### Two-Way Binding
### 双向绑定 ### 双向绑定
@ -211,7 +211,7 @@ code-example(format="" language="bash").
In short, we want two-way data binding. In short, we want two-way data binding.
我们的期望是:在`<input>`中显示英雄的名字,修改它,并且在所有绑定到英雄名字的地方看到这些修改。 我们的期望是:在`<input>`中显示英雄的名字,修改它,并且在所有绑定到英雄名字的地方看到这些修改。
长话短说:我们需要双向数据绑定。 简而言之,我们需要双向数据绑定。
Lets update the template to use the **`ngModel`** built-in directive for two-way binding. Lets update the template to use the **`ngModel`** built-in directive for two-way binding.
@ -223,7 +223,7 @@ code-example(format="" language="bash").
[Forms](../guide/forms.html#ngModel) and [Forms](../guide/forms.html#ngModel) and
[Template Syntax](../guide/template-syntax.html#ngModel) chapters. [Template Syntax](../guide/template-syntax.html#ngModel) chapters.
学习`ngModel`的更多知识,参见[表单](../guide/forms.html#ngModel)和 学习关于`ngModel`的更多知识,参见[表单](../guide/forms.html#ngModel)和
[模板语法](../guide/template-syntax.html#ngModel)两章 [模板语法](../guide/template-syntax.html#ngModel)两章
:marked :marked
Replace the `<input>` with the following HTML Replace the `<input>` with the following HTML
@ -237,7 +237,7 @@ code-example(language="html").
The browser refreshes. We see our hero again. We can edit the heros name and The browser refreshes. We see our hero again. We can edit the heros name and
see the changes reflected immediately in the `<h2>`. see the changes reflected immediately in the `<h2>`.
浏览器刷新。再次见到我们的英雄。我们可以编辑英雄的名字,并且看到改动立刻体现在`<h2>`中。 浏览器刷新。又见到我们的英雄了。我们可以编辑英雄的名字,也能看到这个改动立刻体现在`<h2>`中。
.l-main-section .l-main-section
:marked :marked
@ -245,7 +245,7 @@ code-example(language="html").
## 我们已经走过的路 ## 我们已经走过的路
Lets take stock of what weve built. Lets take stock of what weve built.
我们来清点一下已经构建完成的 我们来盘点一下已经构建完成的部分
* Our Tour of Heroes uses the double curly braces of interpolation (a form of one-way data binding) * Our Tour of Heroes uses the double curly braces of interpolation (a form of one-way data binding)
to display the application title and properties of a `Hero` object. to display the application title and properties of a `Hero` object.
@ -254,9 +254,9 @@ code-example(language="html").
* 我们使用ES2105的模板字符串写了一个多行模板来让我们的模板更有可读性。 * 我们使用ES2105的模板字符串写了一个多行模板来让我们的模板更有可读性。
* We can both display and change the heros name after adding a two-way data binding to the `<input>` element * We can both display and change the heros name after adding a two-way data binding to the `<input>` element
using the built-in `ngModel` directive. using the built-in `ngModel` directive.
* 为了同时显示和修改英雄的名字,我们还使用了内建的`ngModel`指令,往`<input>`元素上添加双向数据绑定。 * 为了同时显示和修改英雄的名字,我们还使用了内建的`ngModel`指令,往`<input>`元素上添加双向数据绑定。
* The `ngModel` directive also propagates changes to every other binding of the `hero.name`. * The `ngModel` directive also propagates changes to every other binding of the `hero.name`.
* 通过`ngModel`指令,这些修改还影响到`hero.name`的每一个其它绑定。 * 通过`ngModel`指令,这些修改还影响到了每一个对`hero.name`的其它绑定。
[Run the live example for part 1](/resources/live-examples/toh-1/ts/plnkr.html) [Run the live example for part 1](/resources/live-examples/toh-1/ts/plnkr.html)
@ -278,7 +278,7 @@ code-example(language="html").
template, and allow a user to select it in the template, and allow a user to select it in the
[next tutorial chapter](./toh-pt2.html). [next tutorial chapter](./toh-pt2.html).
我们的《英雄指南》只显示了一个英雄,而我们真正显示的是一个英雄列表。 我们的《英雄指南》只显示了一个英雄,而我们真正显示的是一个英雄列表。
我们还希望允许用户选择一个英雄,并且显示他的详情。 我们还希望允许用户选择一个英雄,并且显示他/她的详情。
我们还将学习更多:接收一个列表、把它们绑定到模板,以及让用户选择它。 我们还将学习更多:接收一个列表、把它们绑定到模板,以及让用户选择它。
这些都在[教程的下一章](./toh-pt2.html)。 这些都在[教程的下一章](./toh-pt2.html)。