Empêcher la mise en cache de IE11 GET call in Angular 2

J'ai un point final de repos qui renvoie une liste sur un appel GET. J'ai également un point de terminaison POST pour ajouter de nouveaux éléments et un DELETE pour les supprimer. Cela fonctionne dans Firefox et Chrome, et les travaux POST et DELETE dans IE11. Cependant, le GET dans IE11 ne fonctionne que sur la charge initiale de la page. La restauration renvoie les données mises en cache. J'ai vu une publication sur ce comportement dans Angular 1, mais rien pour Angular 2 (release candidate 1).

  • Obtenez des fichiers Angles 2 .ts au lieu des fichiers .d.ts
  • Angular Cli Webpack, Comment ajouter ou regrouper des fichiers js externes?
  • Obtenir une dépendance à partir de l'injecteur manuellement dans une directive
  • Puis-je émettre l'événement de parent à enfant dans Angular 2
  • Séparez les fichiers Angular2 TypeScript et les fichiers JavaScript dans différents dossiers, peut-être 'dist'
  • Test des composants Angular2 qui utilisent setInterval ou setTimeout
  • Angular2 DI dans le type. Pouvons-nous l'utiliser dans les projets node.js / non angulaires?
  • Angular 2 useExisting providers
  • Événement de redimensionnement de fenêtre angulaire
  • Comment puis-je retourner la réponse d'un appel Observable / http / async dans angular2?
  • Comprendre le paquet npm @ -prefix: @ angular / router
  • Angular2: importer le fichier js externe dans le composant
  • 3 Solutions collect form web for “Empêcher la mise en cache de IE11 GET call in Angular 2”

    Reportez la question de la mise en cache Angular IE de la réponse de stackoverflow pour $ http , vous devez ajouter les en-têtes 'Pragma', 'no-cache', 'If-Modified-Since' à chaque demande 'GET'.

    Le scénario de l'intercepteur n'est plus pris en charge par angular 2. Donc, vous devez étendre le http tel qu'il est décrit ici. Qu'est-ce que l'équivalent d'intercepteur HTTP dans angular2? .

    Angular 4.3 comprend désormais le service HttpClient , qui prend en charge les intercepteurs.

    Comme vous l'avez répondu ici , vous pouvez simplement annuler RequestOptions pour ajouter les en-têtes nécessaires:

     import { Injectable } from '@angular/core'; import { BaseRequestOptions, Headers } from '@angular/http'; @Injectable() export class CustomRequestOptions extends BaseRequestOptions { headers = new Headers({ 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT' }); } 

    Module:

     @NgModule({ ... providers: [ ... { provide: RequestOptions, useClass: CustomRequestOptions } ] }) 

    Un peu en retard, mais j'ai rencontré le même problème. Pour Angular 4.X, j'ai écrit une classe Http personnalisée pour ajouter un nombre aléatoire à la fin pour empêcher la mise en cache par IE. Il est basé sur le 2ème lien par les dimeros ( Qu'est-ce que l'équivalent de l'intercepteur HTTP dans angular2? ). Avertissement: pas garanti pour être 100% sans bug.

     import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { Http, Response, XHRBackend, RequestOptions, RequestOptionsArgs, URLSearchParams } from '@angular/http'; @Injectable() export class NoCacheHttp extends Http { constructor(backend: XHRBackend, options: RequestOptions) { super(backend, options); } get(url: string, options?: RequestOptionsArgs): Observable<Response> { //make options object if none. if (!options) { options = { params: new URLSearchParams() }; } //for each possible params type, append a random number to query to force no browser caching. //if string if (typeof options.params === 'string') { let params = new URLSearchParams(options.params); params.set("k", new Date().getTime().toString()); options.params = params; //if URLSearchParams } else if (options.params instanceof URLSearchParams) { let params = <URLSearchParams>options.params; params.set("k", new Date().getTime().toString()); //if plain object. } else { let params = options.params; params["k"] = new Date().getTime().toString(); } return super.get(url, options); } } 
    JavaScript rend le site Web intelligent, beauté et facile à utiliser.