Загрузить HTML-шаблон из файла в переменную в AngularJS

#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 не может работать с отдельным файлом, только если шаблон внутри тега скрипта