anchor.diff:  block rxjs
     :marked
       <a id="rxjs"></a>
  -    
  -    The return value may surprise us. 
  +    The return value may surprise us.
       Many of us who are familiar with asynchronous methods in modern JavaScript would expect the `get` method to return a 
       [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
       We'd expect to chain a call to `then()` and extract the heroes.
       Instead we're calling a `map()` method. 
       Clearly this is not a promise.
  -    
  +
  +    <a id="rxjs"></a>
       返回值可能会让我们感到意外。
       如果按照很多人在现代JavaScript中所熟悉的那种异步调用方法，`get`方法应该返回一个
  -    [承诺(promise)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)
  -    我们没有把一个函数调用链接进`then()`方法中，并从回调参数中取得英雄列表，而是调用了一个`map()`方法。
  +    [承诺(promise)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)。
  +    我们可能期待链接调用`then()`方法并从中取得英雄列表，取而代之，我们调用了一个`map()`方法。
       显然，这并不是承诺(Promise)。
   
       In fact, the `http.get` method returns an **Observable** of HTTP Responses (`Observable<Response>`) from the RxJS library
  
positive.code:   This version gets some heroes from the server, displays them in a list, lets us add new heroes, and saves them to the server.
    We use the !{_Angular_Http} client to communicate via `XMLHttpRequest (XHR)`.
    
    我们的第一个演示是《英雄指南(TOH)》教程的一个mini版。
    这个版本从服务器获取一些英雄，把它们显示在列表中，还允许我们添加新的英雄并将其保存到服务器。
    我们借助!{_Angular_Http}客户端，来通过`XMLHttpRequest (XHR)`与服务器通讯。
  
  
negative.code:   
    它使用`ngFor`来展现这个英雄列表。
    列表的下方是一个输入框和一个*Add Hero*按钮，在那里，我们可以输入新英雄的名字，并把他们加到数据库中。
    我们在`(click)`事件绑定中使用[模板引用变量](template-syntax.html#ref-vars)`newHeroName`来访问这个输入框的值。
    当用户点击此按钮时，我们把这个值传给组件的`addHero`方法，然后清除它，以备输入新英雄的名字。
    
    Below the button is an area for an error message.
  