#javascript #angularjs #angularjs-directive
#javascript #angularjs #angularjs-директива
Вопрос:
У меня проблема с директивами angular. Когда я редактирую содержимое файла, на который ссылается через templateUrl
, результат не отображается, пока я не удалю кэш. У меня есть следующий код:
Directive.js
.directive('appMainsec',['$window', function ($window){
var objectMainSec = {
restrict: 'A',
templateUrl: 'partials/app-mainsec.html',
controller: function (){},
controllerAs: 'MainSectCtrl',
link: function ($scope,elemnt,attr){
elemnt.css('height', ($window.innerHeight - ($window.innerHeight * .25)) 'px');
}
};
return objectMainSec;
}]);
app-mainsec.html
<div><h1>Principal</h1></div>
и index.html
...
<div app-mainsec></div>
...
Когда я меняю <h1>Hi</h1>
на <h1>Hello</h1>
, представление директивы не обновляется, пока я не удалю кэш.
Комментарии:
1. Я не могу понять, чего вы пытаетесь достичь здесь, где ваш контроллер и ваши привязки для <h1> ?
2. Это не проблема, именно так работает Angular. Если вы хотите, чтобы Hi было Hello, создайте переменную области видимости и поместите ее в свой шаблон.
3. Вам не нужно менять заголовок на «(Решить)», если вы примете ответ, люди увидят, что это решение.
4. @jcubic хорошо, я здесь новичок. еще раз спасибо
Ответ №1:
Причина этого в том, что Angular извлекает файл только один раз в начале. Вы можете попробовать использовать templateUrl как функцию и добавлять временную метку, чтобы каждый раз получать новый URL шаблона.
templateUrl: function() {
return 'partials/app-mainsec.html?' new Date();
}
Но, вероятно, она обновит вашу директиву только тогда, когда директива будет скомпилирована.
Комментарии:
1. Стоит отметить, что это отключит кэширование браузером этого HTML-файла.
2. @JonSnow если кэш необходим, то без использования сервера никак. Вам нужно будет просмотреть файл на предмет изменений и отправить уведомление (вы можете использовать websockets), а затем обновить дату в templateUrl. Но я не думаю, что что-то подобное необходимо, потому что что-то подобное предназначено только для разработки. Когда приложение готово, он может заменить функцию строкой.