Question: In my use case (Angular 5 app embedded in a greater website), I am using hash location strategy

```
@NgModule({
  imports: [RouterModule.forRoot(routes, {useHash: true})]
})

```

So my application paths are like `website.com/#/home` and `website.com/#/profile`

App works ok, but I run into one problem in Internet Explorer 11 (which I have to support): Angular change detection doesn't seem to be fully working. Specifically, If I make a UI change to a component, navigate to another path, then return, the old view is shown. Routing works fine, but it's as if the browser cached the view and won't let Angular update the component view.

Not sure where to even start looking for a cause, let alone a fix.

Answer: 
After @DiabolicWords got me to understand that the issue was strictly an Internet Explorer caching issue (IE 11 caches XHR Get responses), I settled on sending a unique query param value with each XHR Get request.

I used [an HttpInterceptor](https://angular.io/guide/http#intercepting-requests-and-responses)

```
@Injectable()
export class NonceQueryParamInterceptor implements HttpInterceptor {

  constructor(private utility: UtilityService) {}

  public intercept(req: HttpRequest<any>, next: HttpHandler) {

    // Checks whether this is IE, and this is a GET request
    if (this.utility.isNoCacheParamNeeded(req, navigator.userAgent)) {

      const modifiedRequest = req.clone(
          {setParams: {nocache: Date.now().toString()}}
      );

      return next.handle(modifiedRequest);

    } else {
      return next.handle(req);
    }
  }
}

```

I then needed to register the interceptor with the application providers

```
@NgModule({
  declarations: [AppComponent],
  providers: [{ 
    provide: HTTP_INTERCEPTORS, 
    useClass: NonceQueryParamInterceptor, multi: true 
  }]
})
export class AppModule {}

```

Registering an HttpInterceptor ensured that all requests throughout the application would pass through this logic:
Here is an example how to set the timestamp

```
private requestOptions: RequestOptionsArgs = {};
private requestUrlSearchParams = new URLSearchParams();

setSearchParamsTimeStamp() {
    this.requestUrlSearchParams.set('timestamp', (new Date()).getTime().toString());
    this.requestOptions.search = this.requestUrlSearchParams;
}

// an example method
public deleteData<T>(url: string, logText: string): Promise<T> {
    this.setSearchParamsTimeStamp();
    this.logger.info(this.name + logText);

    return this.http.delete(url,
        {
            headers: this.jsonHeaders,
            search: this.requestUrlSearchParams,
        })
        .toPromise()
        .then(() => null)
        .catch(this.handleError);
}

```