Cet article vous présente comment utiliser angulairejs pour effacer les modèles de page. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Lors du lancement du projet il y a quelques jours, de nouveaux problèmes sont apparus. Lorsque la page change, le modèle de la page précédente n'est pas nettoyé à temps, ce qui entraînera un chevauchement des pages. La cause de ce problème est la suivante : la mise en cache du modèle de page, c'est-à-dire que lorsque la page précédente se ferme, le navigateur n'efface pas le modèle de la page précédente à temps. Par conséquent, lorsque la nouvelle page est chargée, l'ancien modèle de page est toujours conservé. existe, ce qui entraîne un chevauchement des pages.
La suppression du cache des modèles inclut les paramètres de balises HTML traditionnels vidant le cache, ainsi qu'une certaine suppression de la configuration d'angularJs et la commutation de routage de angulaireJs Clear
1. Voici la méthode traditionnelle pour effacer la balise
HTMLmeta du navigateur. paramètre effacer le cache
<!-- 清除缓存 --><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
Effacer le cache temporaire du formulaire
<body onLoad="javascript:document.formName.reset()">
2. 🎜 >1. Effacez le cache de route. Dans la configuration de la route, injectez le service $httpProvider et effacez le cache de route via la configuration du service $httpProvider.
2. Utilisez des nombres aléatoires. Les nombres aléatoires sont également un très bon moyen d'éviter la mise en cache, c'est-à-dire d'ajouter des nombres aléatoires (généralement des horodatages) après les paramètres de l'URL du lien. Utilisez des heures aléatoires, comme des nombres aléatoires.app.config(["$stateProvider","$urlRouterProvider",'$locationProvider','$httpProvider',function ($stateProvider, $urlRouterProvider,$locationProvider,$httpProvider) { if (!$httpProvider.defaults.headers.get) { $httpProvider.defaults.headers.get = {}; } $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache'; $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';}]);
3. Dans la configuration du routage d'état, configurez l'élément de configuration du cache sur false.
.state("discountCoupon", { url: "/discountCoupon", templateUrl: "discountCoupon.html?" + new Date().getTime(), //随机数 controller: 'discountCoupon', cache: false, //cache配置}) .state("customerPhone", { url: "/customerPhone", templateUrl: "customerPhone.html?" + new Date().getTime(), //随机数 controller: 'customerPhone', cache: false, //cache配置})
3. Le commutateur de routage d'angularJs efface le cache le chargement du modèle par défaut d'angularJs sera mis en cache et le service de cache utilisé est $ templateCache, le service qui envoie les requêtes de modèle est $templateRequest, donc le modèle de la page précédente peut être effacé lorsque le routage est commuté :
1 Après l'envoi de chaque modèle de requête $http, vous pouvez appeler $. tempalteCache.remove( url) ou $tempalteCache removeAll efface tous les caches de modèles.
2. Utilisez $provide.decorator pour réécrire le service natif $templateRequest (angularJs est livré avec $provide service $templateRequest: $TemplateRequestProvider). Dans le service $TemplateRequestProvider, nous pouvons voir que le service $tempalteCache (essentiellement toujours le service $cacheFactory d'angularJs) est utilisé par défaut,$rootScope.$on('$stateChangeStart', //路由开始切换 function (event, toState, toParams, fromState, fromParams) { //路由开始切换,清除以前所有模板缓存 if (fromState.templateUrl !== undefined) { $templateCache.remove(fromState.templateUrl); // $templateCache.removeAll(); } }); $rootScope.$on('$stateChangeSuccess', //路由切换完成 function (event, toState, toParams, fromState, fromParams) { //路由切换成功,清除上一个页面模板缓存 if (fromState.templateUrl !== undefined) { $templateCache.remove(fromState.templateUrl); // $templateCache.removeAll(); } });
this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) { function handleRequestFn(tpl, ignoreRequestError) { handleRequestFn.totalPendingRequests++;
return $http.get(tpl, extend({ cache: $templateCache, transformResponse: transformResponse }, httpOptions)) ['finally'](function () { handleRequestFn.totalPendingRequests--; }) .then(function (response) { $templateCache.put(tpl, response.data); return response.data; }, handleError);
Recommandations associées :
Utilisez slice pour encapsuler les méthodes de tableau dans JSÀ propos de l'opération d'ajout et de soustraction de classes dans jQuery (Code ci-joint)Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!