anchor.diff:    We want to delay rendering of our route component until all necessary data has been fetched or some action
     has occurred.
   
  +  可以预先从服务器读取数据，这样在路由器被激活时，数据已经返回。同时，我们还需要处理数据返回失败和其他出错情况。这样，在`Crisis Center`中，对处理导航到一个无返回数据的`id`有帮助。
  +  我们可以将用户发回只列出有效危机的`Crisis List`。
  +  直到成功获取所有必须的数据或一些行为已经发生，应用需要延迟渲染路由组件。
  +
     We need the `Resolve` guard.
   
  +  我们需要`Resolve`守卫。
  +
     ### Preload route information
  +
  +  ### 预先加载路由信息
   
     We'll update our `Crisis Detail` route to resolve our Crisis before loading the route, or if the user happens to
     navigate to an invalid crisis center `:id`, we'll navigate back to our list of existing crises.
  +
  +  我们需要更新`Crisis Detail`路由，让它先解析必要的危机，再加载路由。或者当用户导航到一个无效的危机`:id`时，将他们导航回危机列表。
   
     Like the `CanActivate` and `CanDeactivate` guards, the **`Resolve`** guard is an interface we can implement as a service
     to resolve route data synchronously or asynchronously. In our `Crisis Detail` component, we used the `ngOnInit` to retrieve the `Crisis`
     information. We also navigated the user away from the route if the `Crisis` was not found. It would be more efficient to perform this
     action before the route is ever activated.
   
  +  和`CanActivate`和`CanDeactivate`守卫一样，服务可以实现**`Resolve`**守卫接口来同步或异步解析路由数据。
  +  `Crisis Detail`组件使用`ngOnInit`来获取`Crisis`信息。如果`Crisis`找不到，用户会被导航出去。在路由被激活之前就处理这些情况会更加有效。
  +
     We'll create a `CrisisDetailResolve` service that will handle retrieving the `Crisis` and navigating the user away if the `Crisis` does
     not exist. Then we can be assured that when we activate the `CrisisDetailComponent`, the associated Crisis will already be available
     for display.
   
  +  现在创建一个`CrisisDetailResolve`服务，用它来处理`Crisis`数据读取和在`Crisis`不存在时将用户导航出去。
  +  然后可以确保当激活`CrisisDetailComponent`时，关联的`Crisis`已经为显示准备妥当。
  +
     Let's create our `crisis-detail-resolve.service.ts` file within our `Crisis Center` feature area.
  +
  +  下面在`Crisis Center`特征区新建的`crisis-detail-resolve.service.ts`文件：
   
   +makeExample('app/crisis-center/crisis-detail-resolve.service.ts', '')
   
  
positive.code:   We'll update the `CrisisDetailComponent` to use the `ActivatedRoute.data`, which is where our `crisis` property from our `Resolve` guard will be provided.
    Once activated, all we need to do is set our local `crisis` and `editName` properties from our resolved `Crisis` information. We no longer need to subscribe
    and unsubscribe to the `ActivatedRoute` params to fetch the `Crisis` because it is being provided synchronously at the time the route component is activated.
  
  +makeExcerpt('app/crisis-center/crisis-detail.component.ts (ngOnInit v2)', 'crisis-detail-resolve')
  
  
negative.code: :marked
    In our `Hero Detail` and `Crisis Detail`, we waited until the route was activated to fetch our respective hero or crisis.
  
    在`Hero Detail`和`Crisis Detail`中，它们等待路由读取对应的英雄和危机。
    
    This worked well for us, but we can always do better.
    If we were using a real world api, there may be some delay in when the data we want to display gets returned.
    We don't want to display a blank component until the data loads in this situation.
  
    这种方式没有问题，但是它们还有进步的空间。
    如果我们在使用真实api，很有可能数据返回有延迟，导致无法即时显示。
    在这种情况下，直到数据到达前，显示一个空的组件不是最好的用户体验。
  
    We'd like to pre-fetch data from the server so it's ready the moment our route is activated.
    We'd also like to handle the situation where our data fails to load or some other error condition occurs.
  