5

Mi avvalgo di templateUrl e funziona benissimo!Aggiorna i modelli memorizzati nella cache

app.directive('myDir', function() { 
    return { 
     templateUrl: 'partials/directives/template.html' 
    }; 
}; 

Tuttavia ... quando apporto modifiche a questi modelli non si aggiorna. In fase di sviluppo non è un grosso problema, perché ho konw ciò che viene aggiornato e può solo cancellare la cache manualmente.

Ma non riesco a cancellare la cache di tutti gli utenti. C'è un modo per fare questo? Ti piace usare il metatag CACHE-CONTROL o qualcosa del genere?

+0

AngularJS templateCache viene cancellato quando si aggiorna il browser. Se stai ancora ricevendo il vecchio modello è dovuto al browser che memorizza nella cache i partial. Come hai detto, devi controllare le intestazioni della cache e modificarle – Chandermani

+0

Non so cosa aggiungere. Devo aggiungere "no cache" a index.html? O lo aggiungo a ogni parziale? Ho anche notato che il server sta inviando i metadati ETAG quindi perché non è il browser (chrome) che lo usa :(? –

+0

Hai trovato una soluzione a questo problema? Se è così, per favore condividi .. – Troels

risposta

1

Per quanto vedo, si hanno due opzioni -

  1. uso $cacheFactory servizio per rimuovere il vecchio nascondiglio Dopo un modello è stata scaricata, cache angolari IT nel default $ servizi templateCache

  2. utilizzare il controllo delle versioni del file rinominare il file con ogni modifica, ovvero se la prima versione del file è template-1.0.1.html, quando si apportano modifiche al codice, rinominarlo in templ ate-1.0.2.html e così via. In questo modo il nuovo file verrà scaricato ogni volta che apporti alcune modifiche.

+0

Grazie, ma non c'è un modo migliore? Entrambe le soluzioni stanno cercando di risolvere il problema, non la causa. La correzione che sto cercando è dove il browser sa che il file è stato aggiornato e poi lo recupera nuovo, ad esempio utilizzando il meta ETAG –

+0

C'è un altro modo: memorizzare i modelli in file js. non sono memorizzati nella cache da angolari. – omickron

+0

Se ci riferiamo a questo tipo di "trucchi", ricordo un vecchio in cui non è necessario modificare il nome del file modello, ma è necessario modificare la richiesta. Quindi andrebbe come 'templateUrl: 'tplFile.html? V = 20150503' – george007

0

Una soluzione rapida e sporca è quella di disabilitare la cache nel $httpProvider

app.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.get = { 
     'Cache-Control': 'no-cache' 
    }; 
}); 

io non consiglierei questo. Ma funziona.

Problemi correlati