anchor.diff:  :marked
     ## Prevent reimport of the _CoreModule_
   
  +  ## 禁止多次导入*CoreModule*
  +
     Only the root `AppModule` should import the `CoreModule`. 
     [Bad things happen](../cookbook/ngmodule-faq.html#q-why-it-is-bad) if a lazy loaded module imports it.
   
  +  只有根模块`AppModule`才能导入`CoreModule`。
  +  如果延迟加载模块导入了它，就会[出问题](../cookbook/ngmodule-faq.html#q-why-it-is-bad)。
  +
     We could _hope_ that no developer makes that mistake. 
     Or we can guard against it and fail fast by adding the following `CoreModule` constructor.
  +
  +  除了*祈祷*任何开发人员都不会犯错。
  +  我们最好还是对它进行一些保护，以便让它“尽快出错”。只要把下列代码添加到`CoreModule`的构造函数中就可以了。
  +
   +makeExample('ngmodule/ts/app/core/core.module.ts', 'ctor')(format='.')
  +
   :marked
     The constructor tells Angular to inject the `CoreModule` into itself.
     That seems dangerously circular.
   
  +  这个构造函数会要求Angular把`CoreModule`注入自身。这看起来像一个危险的循环注入。
  +
     The injection _would be circular_ if Angular looked for `CoreModule` in the _current_ injector.
     The `@SkipSelf` decorator means "_look for_ `CoreModule` _in an ancestor injector, above me in the injector hierarchy._"
  +
  +  确实，如果Angular在*当前*注入器中查阅`CoreModule`，这确实会是一个循环引用。
  +  不过，`@SkipSelf`装饰器意味着“在当前注入器的所有祖先注入器中寻找`CoreModule`。”
     
     If the constructor executes as intended in the `AppModule`, 
     there is no ancestor injector that could provide an instance of `CoreModule`.
     The injector should give up.
  +
  +  如果该构造函数在我们所期望的`AppModule`中运行，就没有任何祖先注入器能够提供`CoreModule`的实例，于是注入器会放弃查找。
   
     By default the injector throws an error when it can't find a requested provider.
     The `@Optional` decorator means not finding the service is OK. 
     The injector returns `null`, the `parentModule` parameter is null,
     and the constructor concludes uneventfully.
   
  +  默认情况下，当注入器找不到想找的提供商时，会抛出一个错误。
  +  但`@Optional`装饰器表示找不到该服务也无所谓。
  +  于是注入器会返回`null`，`parentModule`参数也就被赋成了空值，而构造函数没有任何异常。
  +
     It's a different story if we improperly import `CoreModule` into a lazy loaded module such as `HeroModule` (try it).
  +
  +  如果我们错误的把`CoreModule`导入了一个延迟加载模块（比如`HeroModule`）中，那就不一样了。
     
     Angular creates a lazy loaded module with its own injector, a _child_ of the root injector.
     `@SkipSelf` causes Angular to look for a `CoreModule` in the parent injector which this time is the root injector.
     Of course it finds the instance imported by the root `AppModule`. 
     Now `parentModule` exists and the constructor throws the error.
  +
  +  Angular创建了一个延迟加载模块，它具有自己的注入器，它是根注入器的*子注入器*。
  +  `@SkipSelf`让Angular在其父注入器中查找`CoreModule`，这次，它的父注入器却是根注入器了（而上次父注入器是空）。
  +  当然，这次它找到了由根模块`AppModule`导入的实例。
  +  该构造函数检测到存在`parentModule`，于是抛出一个错误。
  +
   :marked
     ### Conclusion
  +
  +  ### 总结
     
     You made it! You can examine and download the complete source for this final version from the live example.
     <live-example embedded  img="devguide/ngmodule/final-plunker.png"></live-example>
   
  +  完工！你可以到在线例子<live-example embedded  img="devguide/ngmodule/final-plunker.png"></live-example>中试验它，并下载最终版本的全部源码。
  +
     ### Frequently Asked Questions
  +
  +  ### 常见问题（FAQ）
   
     Now that you understand Angular Modules, you may be interested
     in the companion [Angular Module FAQs](../cookbook/ngmodule-faq.html "Angular Module FAQs") cookbook
     with its ready answers to specific design and implementation questions.
  +
  +  现在，你已经理解了Angular的模块，不过你可能还会对烹饪宝典中的[Angular模块常见问题](../cookbook/ngmodule-faq.html "Angular模块常见问题")感兴趣，它解答了很多关于设计和实现方面的问题。
  
positive.code:     Calling it in any other module, particularly in a lazy loaded module,
      is contrary to the intent and is likely to produce a runtime error.
  
      Remember to _import_ the result; don't add it to any other `@NgModule` list.
  
  .l-hr
  
  
negative.code: 
  :marked
    Notice that
    
    注意：
    
    * The `AwesomePipe` and `HighlightDirective` are gone.
    * `AwesomePipe`和`HighlightDirective`不见了。
    * The imports include `SharedModule` instead of `CommonModule` and `FormsModule`
    * 导入`SharedModule`，而不再导入`CommonModule`和`FormsModule`。
    * This new version is leaner and cleaner.
    * 这个新版本更加精简和干净了。
  
  .l-hr
  
  