anchor.diff:    Sometimes only the _Enter_ key matters, because it signals that the user has finished typing.
     One way to reduce the noise would be to examine every `$event.keyCode` and take action only when the key is _Enter_.
   
  +  `(keyup)`事件处理器监听*每一次按键*。
  +  有时我们只在意*回车*键是否被敲过，因为这标志着用户结束了输入。
  +  解决这个问题的一种方法是检查每个`$event.keyCode`，只有当*回车*键被敲入时才采取行动。
  +
     There's an easier way: bind to Angular's `keyup.enter` pseudo-event.
     Then Angular calls the event handler only when the user presses _Enter_.
  +
  +  更简单的方法是：绑定到 Angular 的`keyup.enter` 模拟事件。
  +  然后，只有当用户敲*回车*键时，Angular才会调用事件处理器。
   +makeExample('user-input/ts/app/keyup.components.ts', 'key-up-component-3' ,'app/keyup.components.ts (v3)')(format=".")
   
   :marked
  
positive.code:   Not all elements have a `value` property so it casts `target` to an input element.
    The `OnKey` method more clearly expresses what it expects from the template and how it interprets the event.
  
    ### Passing _$event_ is a dubious practice
    Typing the event object reveals a significant objection to passing the entire DOM event into the method:
    the component has too much awareness of the template details.
    It can't extract information without knowing more than it should about the HTML implementation.
    That breaks the separation of concerns between the template (_what the user sees_)
    and the component (_how the application processes user data_).
  
    The next section shows how to use template reference variables to address this problem.
  
  .l-main-section
  :marked
  
negative.code:     The `newHero` template variable refers to the `<input>` element.
      You can reference `newHero` from any sibling or child of the `<input>` element.
  
      * **使用模板变量来引用元素** —`newHero`模板变量引用了`<input>`元素。
      你可以在`<input>`的任何兄弟或子级元素中使用`newHero`。
  
      * **Pass values, not elements** &mdash;
      Instead of passing the `newHero` into the component's `addHero` method,
      get the input box value and pass *that* to `addHero`.
  
      * **传递数值，而非元素** — 获取输入框的值并将*它*传递给组件的`addHero`，而不要传递`newHero`。
  
      * **Keep template statements simple** &mdash;
      The `(blur)` event is bound to two JavaScript statements.
      The first statement calls `addHero`.  The second statement, `newHero.value=''`,
      clears the input box after a new hero is added to the list.
  
      * **保持模板语句简单** — `(blur)`事件被绑定到两个 JavaScript 语句。第一句调用`addHero`。第二句`newHero.value=''`在添加新英雄到列表中后清除输入框。
  
  .l-main-section
  :marked
  