2015-04-28 2 views
3

Я пишу небольшой инструмент, для которого мне нужно проверить, определен ли определенный ng-шаблон. Все мои шаблоны определяются следующим образом:проверить, существует ли «текст/ng-template»

<script type="text/ng-template" id="example.html">...</script> 

Так проверить, существует ли файл с помощью $ HTTP не будет работать для меня. Как проверить, был ли указан шаблон? Единственный вариант я вижу до сих пор проверяет DOM:

if(angular.element.find('script#example.html').length > 0) { ... 

... но я бы действительно любят лучшее решение, которое не нужно проверять DOM.

ответ

8

Script directive размещает содержимое шаблона в $templateCache (источник ref.), если это шаблон. Это означает, что вы должны быть в состоянии проверить, если шаблон существует, проверяя его наличие в кэше:

if ($templateCache.get('example.html')) { 
    // template is on the page 
} 
+0

Если я использую '$ templateCache.get («example.html»)' он будет пытаться загрузить «пример. html 'из текущего URL-адреса, а затем выбросить ошибку. Он не вернет false или null. –

+1

Нет, он проверяет, кэшируется ли шаблон, и возвращает кэшированный HTML, если он находится в кеше. В противном случае он вернет 'undefined'. '$ templateCache.get' ничего не загрузит ([источник] (https://github.com/angular/angular.js/blob/master/src/ng/cacheFactory.js#L345)). – dfsq

+1

Проверьте демо-версию http://plnkr.co/edit/7wkLUhrv65bsoiAZMkqJ?p=preview – dfsq

Смежные вопросы