anchor.diff:      We can also alias property names in the `inputs` and `outputs` arrays.
       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/my-click.directive.ts', 'my-click-output-2')(format=".")
   
   // #docregion expression-operators
  
positive.code: :marked
    ### NgFor
    `NgFor` is a _repeater_ directive &mdash; a way to customize data display.
  
    Our goal is to present a list of items. We define a block of HTML that defines how a single item should be displayed.
    We tell Angular to use that block as a template for rendering each item in the list.
  
    Here is an example of `NgFor` applied to a simple `<div>`:
  // #enddocregion directives-ngFor-1
  +makeExample('template-syntax/ts/app/app.component.html', 'NgFor-1')(format=".")
  // #docregion directives-ngFor-2
  :marked
    We can also apply an `NgFor` to a component element, as in this example:
  // #enddocregion directives-ngFor-2
  +makeExample('template-syntax/ts/app/app.component.html', 'NgFor-2')(format=".")
  
  
negative.code:   #### NgForTrackBy
    The `ngFor` directive has the potential to perform poorly, especially with large lists.
    A small change to one item, an item removed, or an item added can trigger a cascade of DOM manipulations.
    
    `ngFor`指令有时候会性能较差，特别是在大型列表中。
    对一个条目的一点小更改、移除或添加，都会导致级联的DOM操作。
  
    For example, we could refresh the list of heroes by re-querying the server.
    The refreshed list probably contains most, if not all, of the previously displayed heroes.
    
    例如，我们可以通过重新从服务器查询来刷新英雄列表。
    刷新后的列表可能包含很多（如果不是全部的话）以前显示过的英雄。
  
    *We* know this because the `id` of each hero hasn't changed.
    But Angular sees only a fresh list of new object references.
    It has no choice but to tear down the old list, discard those DOM elements, and re-build a new list with new DOM elements.
    
    *我们*知道这一点，是因为每个英雄的`id`没有变化。
    但在Angular看来，它只是一个由新的对象引用构成的新列表，
    所以它没有选择，只能清理老列表、舍弃那些DOM元素，并且用新的DOM元素来重建一个新列表。
  
    Angular can avoid this churn if we give it a *tracking* function that tells it what we know:
    that two objects with the same `hero.id` are the same *hero*. Here is such a function:
    
    如果我们给它一个 *追踪* 函数，Angular就可以避免这种折腾。追踪函数告诉Angular：我们知道两个具有相同`hero.id`的对象其实是同一个英雄。
    下面就是这样一个函数：
  // #enddocregion directives-ngForTrackBy-1
  +makeExample('template-syntax/ts/app/app.component.ts', 'trackByHeroes')(format=".")
  // #docregion directives-ngForTrackBy-2
  :marked
    Now set the `NgForTrackBy` directive to that *tracking* function.
    Angular offers a variety of equivalent syntax choices including these two:
    
    现在，把`NgForTrackBy`指令设置为那个 *追踪* 函数。
    Angular从语法上提供了等价的可选变体，比如这两个：
  // #enddocregion directives-ngForTrackBy-2
  +makeExample('template-syntax/ts/app/app.component.html', 'NgForTrackBy-2')(format=".")
  // #docregion directives-ngForTrackBy-3
  