anchor.diff:    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.
  +
  +  因为添加了`Resolve`守卫并用它在加载路由之前读取数据，所以在加载`CrisisDetailComponent`后，不再需要读取数据。
  +  因此，可以更新`CrisisDetailComponent`组件，让它使用`Resolve`守卫通过`crisis`属性提供的`ActivatedRoute.data`。
  +  一旦激活`CrisisDetailComponent`，我们可以使用解析过的`Crisis`信息赋值本地属性`crisis`和`editName`。
  +  我们也不再需要通过订阅和反订阅`ActivatedRoute`的参数来获取`Crisis`，因为它已经在路由组件被激活时被同步提供。
   
   +makeExcerpt('app/crisis-center/crisis-detail.component.ts (ngOnInit v2)', 'crisis-detail-resolve')
   
  
positive.code:   `Crisis` model. We inject the `CrisisService` and `Router` and implement the `resolve` method that supports a `Promise`, `Observable` or a synchronous
    return value.
  
    We'll use our `CrisisService.getCrisis` method that returns a promise to prevent our route from loading until the data is fetched. If we don't find a valid `Crisis`,
    we navigate the user back to the `CrisisList`, canceling the previous in-flight navigation to the crisis details.
  
    Now that our guard is ready, we'll import it in our `crisis-center.routing.ts` and use the `resolve` object in our route configuration.
  
  +makeExcerpt('app/crisis-center/crisis-center.routing.5.ts (resolve)', 'crisis-detail-resolve')
  
  :marked
    We'll add the `CrisisDetailResolve` service to our crisis center module's `providers`, so its available to the `Router` during the navigation process.
  
  +makeExcerpt('app/crisis-center/crisis-center.module.ts (crisis detail resolve provider)', 'crisis-detail-resolve')
  
  
negative.code:   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', '')
  
  