#angularjs
#angularjs
Вопрос:
Я работаю с формой, которая должна привязывать HTML к редактору расширенного текста. Лучшим способом хранения этого HTML-содержимого будет HTML-файл.
Я не совсем понимаю, как загрузить HTML-шаблон из файла и присвоить его переменной.
Кажется, что директивы могут это делать при работе с templateUrl. Было интересно, есть ли какой-либо низкоуровневый API в angular для достижения того же самого внутри контроллера
Ответ №1:
Используя $templateRequest
, вы можете загрузить шаблон по его URL-адресу без необходимости встраивать его в свою HTML-страницу. Если шаблон уже загружен, он будет взят из кэша.
app.controller('testCtrl', function($scope, $templateRequest, $sce, $compile){
// Make sure that no bad URLs are fetched. You can omit this if your template URL is
// not dynamic.
var templateUrl = $sce.getTrustedResourceUrl('nameOfTemplate.html');
$templateRequest(templateUrl).then(function(template) {
// template is the HTML template as a string
// Let's put it into an HTML element and parse any directives and expressions
// in the code. (Note: This is just an example, modifying the DOM from within
// a controller is considered bad style.)
$compile($("#my-element").html(template).contents())($scope);
}, function() {
// An error has occurred
});
});
Имейте в виду, что это ручной способ сделать это, и в то время как в большинстве случаев предпочтительным способом было бы определить директиву, которая извлекает шаблон с помощью templateUrl
свойства.
Комментарии:
1. Привет, cdauth, есть идеи, как загрузить JS вместе с шаблоном plane html.
2. Большое вам спасибо. Это потрясающе.
Ответ №2:
Все шаблоны загружаются в кэш. Для получения доступа к шаблонам вы можете использовать встроенную службу $templateCache:
app.controller('testCtrl', function($scope, $templateCache){
var template = $templateCache.get('nameOfTemplate.html');
});
Комментарии:
1. Это, кажется, работает, если шаблон определен в тексте, используя <script type=»text/ng-template» id=»templateId.html»>, but not for files on the server. НО — этого достаточно. Я подожду пару часов, чтобы узнать, есть ли более полный ответ, иначе отметьте это
2. Как вы хотели получить свои шаблоны? Вы также можете сделать
<script type="text/ng-template" id="templateId.html" src="server/path/to/your/template.html"></script>
. Или вы можете использовать службу $ http, чтобы вручную извлекать шаблоны и использовать$templateCache.put
их для хранения.3. ок — идеально. Это охватывает сценарий, который я искал. Спасибо!
4. Мой отладчик сообщает мне, что он не может получить «get of undefined». Допустим, у меня есть несколько блогов, и я хочу вернуть их на основе атрибута «:param» в поставщике маршрутов. Будет ли это одним из способов указать это с помощью $templateCache?
5. @dustyrockpyle не может работать с отдельным файлом, только если шаблон внутри тега скрипта