anchor.diff:    We'd like to use two-way binding with HTML form elements like `<input>` and `<select>`.
     Sadly, no native HTML element follows the `x` value and `xChange` event pattern.
   
  -  我们希望能在像`<input>`和`<select>`这样的HTML元素上使用双向数据绑定。可惜，原生HTML元素不自带像`x`值和`xChange`事件的模式。
  +  我们希望能在像`<input>`和`<select>`这样的 HTML 元素上使用双向数据绑定。
  +  可惜，原生 HTML 元素不遵循`x`值和`xChange`事件的模式。
   
     Fortunately, the Angular [_NgModel_](#ngModel) directive is a bridge that enables two-way binding to form elements.
   
  -  幸运的是，Angular以[_NgModel_](#ngModel)指令为桥梁，让我们可以在表单元素上使用双向数据绑定。
  +  幸运的是，Angular 以 [_NgModel_](#ngModel) 指令为桥梁，允许在表单元素上使用双向数据绑定。
   
   a#ngModel
   .l-main-section
   :marked
     ## Two-way binding with NgModel
   
  -  ## 使用NgModel进行双向数据绑定
  +  ## 使用 NgModel 进行双向数据绑定
   
     When developing data entry forms, we often want to both display a data property and update that property when the user makes changes.
   
  -  当开发数据输入表单时，我们经常希望能显示数据属性，并在用户做出变更时，更新属性及其显示。
  +  当开发数据输入表单时，我们经常希望能显示数据属性，并在用户做出变更时更新该属性。
   
     Two-way data binding with the `NgModel` directive makes that easy. Here's an example:
   
  
positive.code:   Yet another is setting the model property of a custom component (a great way
    for parent and child components to communicate):
  
    还有另一个例子是设置一个自定义组件的模型属性(这是父子组件之间通讯的重要途径)：
  +makeExample('template-syntax/ts/app/app.component.html', 'property-binding-4')(format=".")
  :marked
    ### One-way *in*
    ### 单向*输入*
    People often describe property binding as *one-way data binding* because it flows a value in one direction,
    from a component’s data property into a target element property.
  
    人们经常把属性绑定描述成*单向数据绑定*，因为值的流动是单向的，从组件中的属性数据，流动到目标元素的属性。
  
    We cannot use property binding to pull values *out* of the target element.
    We can't bind to a property of the target element to read it. We can only set it.
  
    我们不能使用属性绑定来从目标元素拉取值，也不能绑定到目标元素的属性来读取它。我们只能设置它。
  
  .l-sub-section
    :marked
      Nor can we use property binding to *call* a method on the target element.
  
      我们也不能使用属性绑定来*调用*目标元素上的方法。
  
      If the element raises events we can listen to them with an [event binding](#event-binding).
  
      如果这个元素触发了事件，我们可以通过[事件绑定](#event-binding)来监听它们。
  
      If we must read a target element property or call one of its methods,
      we'll need a different technique.
  
negative.code:   Imagine guarding against a null somewhere in a long property path such as `a.b.c.d`.
  
    这些方法都有价值，但是会显得笨重，特别是当这个属性路径非常长的时候。
    想象一下在一个很长的属性路径（如`a.b.c.d`）中对空值提供保护。
  
  :marked
    The Angular safe navigation operator (`?.`) is a more fluent and convenient way to guard against nulls in property paths.
    The expression bails out when it hits the first null value.
    The display is blank, but the app keeps rolling without errors.
  
    Angular 安全导航操作符 (`?.`) 是在属性路径中保护空值的更加流畅、便利的方式。
    表达式会在它遇到第一个空值的时候跳出。
    显示是空的，但应用正常工作，而没有发生错误。
  +makeExample('template-syntax/ts/app/app.component.html', 'safe-6')(format=".")
  :marked
    It works perfectly with long property paths such as `a?.b?.c?.d`.
  