anchor.diff:    This code sets the input box `value` property by binding to the `firstName` property. To listen for changes to the value, the code binds to the input box's `input` event.
     When the user makes changes, the `input` event is raised, and the binding executes the statement within a context that includes the DOM event object, `$event`.
   
  -  我们在把输入框的`value`绑定到`firstName`属性，并且我们正在通过绑定到输入框的`input`事件来监听更改。
  -  当用户造成更改时，`input`事件被触发，并且在一个包含了DOM事件对象的`$event`的上下文中执行这条语句。
  +  上面的代码在把输入框的`value`属性绑定到`firstName`属性。
  +  要监听对值的修改，代码绑定到输入框的`input`事件。
  +  当用户造成更改时，`input`事件被触发，并在包含了 DOM 事件对象 (`$event`) 的上下文中执行这条语句。
   
     To update the `firstName` property, the changed text is retrieved by following the path `$event.target.value`.
   
  -  要更改`firstName`属性，就要通过路径`$event.target.value`来获取更改后的值。
  +  要更新`firstName`属性，就要通过路径`$event.target.value`来获取更改后的值。
   
     If the event belongs to a directive (recall that components are directives), `$event` has whatever shape the directive decides to produce.
   
  -  如果这个事件属于指令(回想一下：组件是指令的一种)，那么`$event`便具有指令中生成的形态(译注：比如inputs)。
  +  如果事件属于指令（回想一下，组件是指令的一种），那么`$event`具体是什么由指令决定。
   
     <a id="eventemitter"></a>
     <a id="custom-event"></a>
     ### Custom events with *EventEmitter*
   
  -  ### 使用*EventEmitter*实现自定义事件
  +  ### 使用 *EventEmitter* 实现自定义事件
   
     Directives typically raise custom events with an Angular [EventEmitter](../api/core/index/EventEmitter-class.html).
     The directive creates an `EventEmitter` and exposes it as a property.
     The directive calls `EventEmitter.emit(payload)` to fire an event, passing in a message payload, which can be anything.
     Parent directives listen for the event by binding to this property and accessing the payload through the `$event` object.
   
  -  指令使用典型的Angular [EventEmitter](../api/core/index/EventEmitter-class.html)来触发自定义事件。
  -  指令创建一个`EventEmitter`实例，并且把它作为一个属性暴露出来。
  -  指令调用`EventEmitter.emit(payload)`来触发事件，传进去的消息载荷可以是任何东西。
  -  父指令通过绑定到这个属性来监听这个事件，并且通过`$event`对象来访问这个载荷。
  +  通常，指令使用 Angular [EventEmitter](../api/core/index/EventEmitter-class.html) 来触发自定义事件。
  +  指令创建一个`EventEmitter`实例，并且把它作为属性暴露出来。
  +  指令调用`EventEmitter.emit(payload)`来触发事件，可以传入任何东西作为消息载荷。
  +  父指令通过绑定到这个属性来监听事件，并通过`$event`对象来访问载荷。
   
     Consider a `HeroDetailComponent` that presents hero information and responds to user actions.
     Although the `HeroDetailComponent` has a delete button it doesn't know how to delete the hero itself.
     The best it can do is raise an event reporting the user's delete request.
   
  -  假设一个`HeroDetailComponent`，它展示英雄的信息，并响应用户的动作。
  -  虽然`HeroDetailComponent`有一个删除按钮，但它自己并不知道该如何删除这个英雄。
  -  最好的做法是触发一个事件来报告“删除用户”的请求。
  +  假设`HeroDetailComponent`用于显示英雄的信息，并响应用户的动作。
  +  虽然`HeroDetailComponent`包含删除按钮，但它自己并不知道该如何删除这个英雄。
  +  最好的做法是触发事件来报告“删除用户”的请求。
   
     Here are the pertinent excerpts from that `HeroDetailComponent`:
   
  -  这里是来自`HeroDetailComponent`的相关摘要：
  +  下面的代码节选自`HeroDetailComponent`：
   +makeExample('template-syntax/ts/app/hero-detail.component.ts',
  -'template-1', 'HeroDetailComponent.ts (template)')(format=".")
  +'template-1', 'HeroDetailComponent.ts (模板)')(format=".")
   +makeExample('template-syntax/ts/app/hero-detail.component.ts',
  -'deleteRequest', 'HeroDetailComponent.ts (delete logic)')(format=".")
  +'deleteRequest', 'HeroDetailComponent.ts (删除逻辑)')(format=".")
   
   :marked
     The component defines a `deleteRequest` property that returns an `EventEmitter`.
     When the user clicks *delete*, the component invokes the `delete()` method, 
     telling the `EventEmitter` to emit a `Hero` object.
   
  -  组件定义了一个`deleteRequest`属性，它是一个`EventEmitter`实例。(译注：`deleteRequest`属性是导出Output属性，是组件与父级组件交互的主要方式之一。参见[输入和输出属性](#input-and-output-properties)和[父组件监听子组件的事件](docs/ts/latest/cookbook/component-communication.html#!#child-to-parent)。我们需要用`@Output()`来装饰它，或者把它添加到组件元数据的`outputs`数组中，它才能在父级组件可见。)
  -  当用户点击*删除*时，组件会调用`delete()`方法，这个方法告诉`EventEmitter`，发出一个`Hero`对象。
  +  组件定义了`deleteRequest`属性，它是`EventEmitter`实例。
  +  当用户点击*删除*时，组件会调用`delete()`方法，让`EventEmitter`发出一个`Hero`对象。
   
     Now imagine a hosting parent component that binds to the `HeroDetailComponent`'s `deleteRequest` event.
   
  -  现在，想象作为宿主的父组件绑定到了`HeroDetailComponent`的`deleteRequest`事件。
  +  现在，假设有个宿主的父组件，它绑定了`HeroDetailComponent`的`deleteRequest`事件。
   
   +makeExample('template-syntax/ts/app/app.component.html',
   'event-binding-to-component')(format=".")
  
positive.code:     We write a colon-delimited (`:`) string with
      the directive property name on the *left* and the public alias on the *right*:
  
      我们也能在`inputs`和`outputs`数组中为属性指定别名。
      我们可以写一个冒号(`:`)分隔的字符串，*左侧*是指令中的属性名，*右侧*则是公开的别名。
    +makeExample('template-syntax/ts/app/click.directive.ts', 'output-myClick2')(format=".")
  
  <a id="expression-operators"></a>
  
negative.code:   once for the (*) prefixed version and once for the expanded template version.
    That's exactly what we see in this example:
  
    上面这种情况下，它管理两组`NgSwitchCase`和`NgSwitchDefault`指令，一次是 (*) 前缀的版本，一次是展开模板后的版本。
    我们也期待它显示所选模板的值两次。这正是在这个例子中看到的：（译注：下图是错误的，应显示两次）
  figure.image-display
      img(src='/resources/images/devguide/template-syntax/ng-switch-anim.gif' alt="NgSwitch")
  :marked
  