anchor.diff:    It presents a list of questions, each question bound to a `<df-question>` component element.
     The `<df-question>` tag matches the `DynamicFormQuestionComponent`,
     the component responsible for rendering the details of each _individual_ question based on values in the data-bound question object.  
  -
  +  
  +  它显示一个问卷问题的列表，每个问题都在`<df-question>`组件元素之内。`<df-question>`对应于`DynamicFormQuestionComponent`，该组件的作用是根据问卷问题对象的值来渲染每个问卷问题的细节。
  +  
   +makeTabs(
     `cb-dynamic-form/ts/app/dynamic-form-question.component.html,
      cb-dynamic-form/ts/app/dynamic-form-question.component.ts`,
  
positive.code:    especially if we'll need a great number of them, they're similar to each other, and they change frequently 
     to meet rapidly changing business and regulatory requirements.
     
     It may be more economical to create the forms dynamically, based on metadata that describe the business object model.
     
     In this cookbook we show how to use `ngFormModel` to dynamically render a simple form with different control types and validation.
     It's a primitive start. 
     It might evolve to support a much richer variety of questions, more graceful rendering, and superior user experience.
     All such greatness has humble beginnings.
    
     In our example we use a dynamic form to build an online application experience for heroes seeking employment.
     The agency is constantly tinkering with the application process.
     We can create the forms on the fly *without changing our application code*. 
     
  <a id="toc"></a>
  :marked
     ## Table of contents
  
        [Question Model](#object-model)
  
        [Form Component](#form-component)
  
        [Questionnaire Metadata](#questionnaire-metadata)
        
        [Dynamic Template](#dynamic-template)
  
  :marked
     **See the [live example](/resources/live-examples/cb-dynamic-form/ts/plnkr.html)**.
  
  .l-main-section
  <a id="object-model"></a>
  :marked
     ## Question Model
  
     The first step is to define an object model that can describe all scenarios needed by the form functionality.
     The hero application process involves a form with a lot of questions. 
     The "question" is the most fundamental object in the model.
  
     We have created `QuestionBase` as the most fundamental question class.
  
  +makeExample('cb-dynamic-form/ts/app/question-base.ts','','app/question-base.ts')
  
  
negative.code:    From this base we derived two new classes in `TextboxQuestion` and `DropdownQuestion` that represent Textbox and Dropdown questions. 
     The idea is that the form will be bound to specific question types and render the appropriate controls dynamically. 
     
     在这个基础上，我们衍生了两个新类`TextboxQuestion` 和 `DropdownQuestion`，分别代表文本框和下拉框。这么做的初衷是，表单能动态的绑定特定的问卷问题类型，并动态渲染合适的控制器。
     
     `TextboxQuestion` supports multiple html5 types like text, email, url etc via the `type` property.
     
     `TextboxQuestion`通过`type`属性，支持多种HTML5元素类型，比如文本、邮件、网址等。
  
  +makeExample('cb-dynamic-form/ts/app/question-textbox.ts',null,'app/question-textbox.ts')(format='.')
  
  :marked
     `DropdownQuestion` presents a list of choices in a select box.
     
     `DropdownQuestion`代表一个拥有一个列表可选项目的选择框。
     
  +makeExample('cb-dynamic-form/ts/app/question-dropdown.ts',null,'app/question-dropdown.ts')(format='.')
  
  :marked
     Next we have defined `QuestionControlService`, a simple service for transforming our questions to an ngForm control group. 
     In a nutshell, the control group consumes the metadata from the question model and allows us to specify default values and validation rules.
     
     下一步，我们定义了`QuestionControlService`，一个可以把我们的问卷问题转换为ngForm控制组的服务。简而言之，这个ngForm控制组使用问卷模型的元数据，允许我们制定默认值和验证规则。
  +makeExample('cb-dynamic-form/ts/app/question-control.service.ts',null,'app/question-control.service.ts')(format='.')
  
  <a id="form-component"></a>
  :marked
     ## Question form components
     ## 问卷表单组件
     
     Now that we have defined the complete model we are ready to create components to represent the dynamic form.
     现在我们已经有一个已定义的完整模型，我们可以创建一个动态表单的组件。
  
  :marked
    `DynamicForm` is the entry point and the main container for the form.
    
    `DynamicForm`是我们表单的主要载体和切入口。 
  +makeTabs(
    `cb-dynamic-form/ts/app/dynamic-form.component.html,
     cb-dynamic-form/ts/app/dynamic-form.component.ts`,
  