Проблеми при опресняване на промените в angularjs на производствен сървър

Имам повтарящ се проблем, който възниква, когато правя промени в моето приложение angularjs. Проблемът е, че трябва да опресня страницата, ако искам да заредя промените, които съм направил. Това е проблем, защото не искам моите потребители да трябва да опресняват страницата (може да не знаят да направят това). Може да си помислят, че сайтът е повреден. Има ли някаква ъглова директива или процес, който мога да следвам, който ще позволи промените ми в потребителския интерфейс да бъдат отразени на моя производствен сървър, без моите потребители да трябва да опресняват страницата?


person Chris Paterson    schedule 19.12.2013    source източник


Отговори (2)


Има няколко решения, които можете да разгледате,

  1. Тук има подобен отговор на вашия въпрос:

AngularJS деактивира частичното кеширане на машина за разработка

За да цитирам приетия отговор на тази публикация:

"ето един начин винаги автоматично да изчиствате кеша, когато съдържанието на ng-view се промени"

myApp.run(function($rootScope, $templateCache) {
   $rootScope.$on('$viewContentLoaded', function() {
      $templateCache.removeAll();
   });
});
  1. Тук може да се намери и неъглово решение:

Принудително изчистване на кеша на браузъра

За да цитирам най-добрия отговор на този пост (отговорът на Фермин):

Ако искате да видите промените в css или js, един от начините е да добавите _versionNo към css/js файла за всяко издание. напр.

script_1.0.css script_1.1.css script_1.2.css и т.н.

Можете да проверите тази връзка, за да видите как може да работи.

Надявам се тези да помогнат.

РЕДАКТИРАНЕ. За да отговоря на вашия коментар, съжалявам, че горното не проработи.

Може би бихте могли да опитате да приложите подход, базиран на websockets, подобен на Trello, при който след определен период от време вие ​​молите потребителя да актуализира страницата си, за да получава нови актуализации на системата или да опресни, ако връзката му с сокет е изтекла? В зависимост от вашата настройка може да намерите този урок за полезен: http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

person David Swindells    schedule 19.12.2013
comment
Това е интересно, но не работи. Добавих alert('TEST') след $templateCache.removeAll(); и видях предупредителното съобщение, но нито една от новите ми ъглови промени не се показва на страницата, освен ако не опресня страницата. Това представлява огромен проблем при актуализиране на ъглово приложение. Не мога разумно да очаквам потребителите ми да знаят кога да обновят страницата. - person Chris Paterson; 19.12.2013
comment
Здравей приятелю, актуализирах отговора си в отговор на твоя коментар. Надявам се това да помогне. - person David Swindells; 19.12.2013
comment
Предвиждам нещо, което ще се наблюдава в обхват и когато сокетът изпрати известие за актуализация, можете да покажете на потребителя съобщение/банер/изскачащ прозорец за актуализация, за да го накарате да опресни страницата си. Все още не съм направил това в собственото си приложение, но това е нещо, което съм мислил да направя, за да реша същия проблем/притеснение, което имах. - person David Swindells; 19.12.2013
comment
@ChrisPaterson разрешавал ли си някога това. Имаше ли ъглов начин, който намерихте - трудно ми беше да намеря отговор. - person jamie; 07.06.2015

С помощта на html2js можете по-лесно да управлявате версиите на шаблони. Това е плъгин на Grunt, който ще зареди всички ваши шаблони в js файл. Недостатъкът е, че всички ваши шаблони се зареждат независимо от необходимостта, плюсът е, че всичките ви шаблони са заредени готови за използване при едно http извикване и една точка на кеширане за тях. По този начин можете да настроите да преименувате вашия js файл при нови издания и да разбиете кеша за шаблони при производство. Що се отнася до dev, другият отговор тук е достатъчен.

person Spera    schedule 18.05.2015