anchor.diff:    `FormGroup` instance and associates it with an HTML element. 
     In this case, it associates the `FormGroup` you saved as 
     `heroForm` with the form element.
  +  
  +  `formGroup`是一个响应式表单的指令，它拿到一个现有`FormGroup`实例，并把它关联到一个HTML元素上。
  +  这种情况下，它关联到的是`form`元素上的`FormGroup`实例`heroForm`。
   
     Because the class now has a `FormGroup`, you must update the template 
     syntax for associating the input with the corresponding 
  
positive.code: 
  
  
  :marked
    Great! You have the basics of a form. 
    
    In real life apps, forms get big fast. 
    `FormBuilder` makes form development and maintenance easier.
  
  
  .l-main-section
  a#formbuilder
  :marked
    ## Introduction to _FormBuilder_
  
    The `FormBuilder` class helps reduce repetition and 
    clutter by handling details of control creation for you. 
  
    To use `FormBuilder`, you need to import it into `hero-detail.component.ts`:
  +makeExample('reactive-forms/ts/src/app/hero-detail-3a.component.ts', 'imports','src/app/hero-detail.component.ts (excerpt)')(format=".")
  
  :marked
    Use it now to refactor the `HeroDetailComponent` into something that's a little easier to read and write,
    by following this plan:
  
    * Explicitly declare the type of the `heroForm` property to be `FormGroup`; you'll initialize it later.
    * Inject a `FormBuilder` into the constructor.
    * Add a new method that uses the `FormBuilder` to define the `heroForm`; call it `createForm`.
    * Call `createForm` in the constructor.
  
    The revised `HeroDetailComponent` looks like this:
  +makeExample('reactive-forms/ts/src/app/hero-detail-3a.component.ts', 'v3a','src/app/hero-detail.component.ts (excerpt)')(format=".")
  
  :marked
    `FormBuilder.group` is a factory method that creates a `FormGroup`. &nbsp;
    `FormBuilder.group` takes an object whose keys and values are `FormControl` names and their definitions. 
    In this example, the `name` control is defined by its initial data value, an empty string.
  
    Defining a group of controls in a single object makes for a compact, readable style.
    It beats writing an equivalent series of `new FormControl(...)` statements.
  
  a#validators
  :marked
   ### Validators.required
   Though this guide doesn't go deeply into validations, here is one example that 
   demonstrates the simplicity of using `Validators.required` in reactive forms. 
  
  
negative.code:     Like the `form-control` class, it _styles_ the form 
      but in no way impacts its logic.
  
      请无视*CSS*类`form-group`，它属于<a href="http://getbootstrap.com/" target="_blank" title="Bootstrap CSS">Bootstrap CSS library</a>而不是Angular。
      就像`form-control`类一样，它只是为表单添加样式，而对表单逻辑毫无影响。
  
  :marked
    The form looks great. But does it work? 
    When the user enters a name, where does the value go? 
    
    表单看起来很棒，但是它能用吗？
    当用户输入名字时，它的值去了哪里？
  
  a#json
  :marked
    ## Taking a look at the form model
    
    表单模型概览
    
    The value goes into the **_form model_** that backs the group's `FormControls`.
    To see the form model, add the following line after the 
    closing `form` tag in the `hero-detail.component.html`:
    
    这个值进入了幕后**表单模型**中的`FormControl`构成的表单组。
    要想知道表单模型是什么样的，请在`hero-detail.component.html`的`form`标签紧后面添加如下代码：
  
  +makeExample('reactive-forms/ts/src/app/hero-detail-3.component.html', 'form-value-json','src/app/hero-detail.component.html')(format=".")
  
  :marked
    The `heroForm.value` returns the _form model_.
    Piping it through the `JsonPipe` renders the model as JSON in the browser:
    
    `heroForm.value`会返回表单模型。
    用`JsonPipe`管道把这个模型以JSON格式渲染到浏览器中。
  
  figure.image-display
    img(src="/resources/images/devguide/reactive-forms/json-output.png" width="400px" alt="JSON output")
  