title: Angular resolver not updating or refetching data, despite `runGuardsAndResolvers` set to 'always'?
body: <p>I have a set of Angular routes, with a listing of entities, with two child routes for creation of such an entity and the editing of an existing entity. The listing of entities has a <code>resolver</code> attached to it to prefetch the data for the component before displaying it. These routes can be summarised as follows, see further down for how these routes are described in code.</p>
  
  <ul>
  <li>index: <code>/items</code></li>
  <li>create: <code>/items/create</code></li>
  <li>edit: <code>/items/:itemId/edit</code></li>
  </ul>
  
  <p>However, if I am at <code>/items/create</code>, and successfully create an item, navigating "back" to <code>/items</code> or any edit route, or even back to <code>/</code> will not result in my resolver fetching updated data like I expect. <strong>This is despite having the <code>runGuardsAndResolvers</code> property set to "always"</strong>. <a href="https://stackoverflow.com/questions/44232418/how-to-refresh-a-routes-resolved-data">My understanding</a> is that this property should enable to functionality I'm looking for.</p>
  
  <p>Why is this, and how can I enable the functionality I'm looking for, <em>without</em> doing something like subscribing to router events in my component and duplicating logic. </p>
  
  <h1>Routes</h1>
  
  <pre><code>const itemRoutes: Routes = [
      {
          path: '', // nb: this is a lazily loaded module that is itself a child of a parent, the _actual_ path for this is `/items`. 
          runGuardsAndResolvers: 'always',
          component: ItemsComponent,
          data: {
              breadcrumb: 'Items'
          },
          resolve: {
              items: ItemsResolver
          },
          children: [
              {
                  path: 'create',
                  component: CreateItemComponent,
                  data: {
                      breadcrumb: 'Create Item'
                  }
              },
              {
                  path: ':itemId/edit',
                  component: EditOrArchiveItemComponent,
                  data: {
                      breadcrumb: 'Editing Item :item.name'
                  },
                  resolve: {
                      item: ItemResolver
                  }
              }
          ]
      }
  ];
  </code></pre>
  
  <h1>ItemsResolver</h1>
  
  <pre><code>@Injectable()
  export class ItemsResolver implements Resolve&lt;ItemInIndex[]&gt; {
      public constructor(public itemsHttpService: ItemsHttpService, private router: Router) {}
  
      public resolve(ars: ActivatedRouteSnapshot, rss: RouterStateSnapshot): Observable&lt;ItemInIndex[]&gt; {
          return this.itemsHttpService.index().take(1).map(items =&gt; {
              if (items) {
                  return items;
              } else {
                  this.router.navigate(['/']);
                  return null;
              }
          });
      }
  }
  </code></pre>
  
  <h1>ItemsHttpService</h1>
  
  <p>(Posting at request)</p>
  
  <pre><code>@Injectable()
  export class ItemsHttpService  {
  
      public constructor(private apollo: Apollo) {}
  
      public index(): Observable&lt;ItemInIndex[]&gt; {
          const itemsQuery = gql`
              query ItemsQuery {
                  items {
                      id,
                      name
                  }
              }
              `;
  
          return this.apollo.query&lt;any&gt;({
              query: itemsQuery
          }).pipe(
              map(result =&gt; result.data.items)
          );
      }
  }
  </code></pre>