Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2013, 14:41
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Как встроить HTML в директиву?
Ко мне приходит JSON файл вида [{html: '...', pos: '', ...}, ...]

Нужно превратить его в список ng-repeat, чтобы в каждый элемент (или вместо каждого) был вставлен шаблон из html. Можно засунуть html в js-вставку, превратив его в шаблон. и вставлять с помощью ng-include, но как-то это коряво. Можно конкретно для этого html создавать отдельную директиву в цикле, где в качестве template указывать значение из html, но это кажется тяжеловесным. Пробовал экспериментировать с ng-transclude, но она вставляет как строку. Еще есть $compile, но почему-то кажется, что как-то по-другому это делается. Как бы вы поступили?

Последний раз редактировалось Shitbox2, 17.11.2013 в 14:45.
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2013, 14:58
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

если приходящий html содержит ангуляр выражения или директивы - $compile
http://angular.ru/api/ng.$compile

еще есть такая штука
http://angular.ru/api/ng.$templateCache
http://egghead.io/lessons/angularjs-templatecache

и не совсем понятно, зачем гонять html, если можно json?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2013, 15:29
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Не, выражений там точно не будет. ХТМЛ, т.к. это произвольные рекламные блоки с разной версткой. Иногда картинка, иногда ХТМЛ, иногда даже флеш.

С templateCache прикольно. Забыл уже что там можно так кэшировать шаблоны. Но все-равно придется сначала в цикле закэшировать все шаблоны, а потом насоздавать отдельных директив с разными шаблонами. Наверное, compile тут больше подходит.

Там есть вторая проблема. Как бы вставить все эти элементы в ДОМ за один раз. Т.е. должно быть что-то вроде
<div ng-repeat="item in items">{{$compile(item.html)}}</div>

Последний раз редактировалось Shitbox2, 17.11.2013 в 15:35.
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2013, 15:57
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

я юзаю версию 1.1.5, там можно так

<div ng-repeat="item in items">
    <div ng-bind-html-unsafe="item"></div>
</div>

http://angular.ru/api/ng.directive:ngBindHtmlUnsafe
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2013, 16:25
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Заработало! Мне и обычный ngBindHtml подходит, только к нему нужно ngSanitize подключать, который в отдельном файле лежит. А я-то думал, чего он у меня на весь html ругается)

В версии 1.2 немного другая система: http://docs.angularjs.org/api/ng.$sce#example

Последний раз редактировалось Shitbox2, 17.11.2013 в 16:53.
Ответить с цитированием
  #6 (permalink)  
Старый 17.11.2013, 17:28
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Есть идеи, как сделать, чтобы html заменял собой директиву? (а не вставлялся внутрь)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как с помощью javascript взять данные из одного файла html и закинуть в другой? rusik Общие вопросы Javascript 10 08.08.2016 12:11
Как изменить HTML который пришел с серевера? wawandas Общие вопросы Javascript 4 24.03.2013 20:13
как правильно отслеживать вставку html() bombascter jQuery 15 20.11.2012 09:47
как вставлять flash в html через js михаил123 Flash 1 17.11.2012 22:01
как отделить javascript от html chippolino Общие вопросы Javascript 4 11.05.2010 09:12