2015-12-21 2 views
4

Я застрял в этой проблеме и надеюсь, что вы можете указать мне в правильном направлении.Как добавить загруженный контент ajax, содержащий выражение AngularJS, с jquery

Адрес fiddle.

объяснителя

1) Я получаю некоторый шаблон HTML с помощью запроса AJAX, все работает отлично, это то, что он выглядит:

 <div> 
      <h2 class="splash" ng-bind="view.headline || 'That&#039;s cool'"></h2> 
     </div> 

Как вы уже знаете, если view.headline это будет выводиться Это круто

2) Добавление шаблона в дом (только псевдокод)

<div id="thisIsMyTemplatePlaceholder"></div> 
<script> 
var templateFromAjax="<h2 ng-bind=\"view.headline||'That&#039;s cool'\"></h2>"; 
$("#thisIsMyTemplatePlaceholder").html(templateFromAjax); 
</script> 

3) Проверьте добавленный HTML вы видите три «(апостроф) на атрибуте нг-связывания, и это приводит к тому, мою ошибку

<div id="thisIsMyTemplatePlaceholder"> 
<h2 ng-bind="view.headline||'That's cool'"></h2> 
</div> 

4) Проблема, кажется, JQuery .html(), потому что он декодирует специальные символы.

jquery is transforming this: 'That&#039;s cool' into 'That's' 
+1

Вы не должны смешивать jQuery внутри с угловым, если у вас есть шаблон, который вы хотите вставить в страницу, вы должны использовать директиву. Чтобы решить вашу проблему, используйте ng-include для вставки вашего шаблона. – SoluableNonagon

+0

Можете ли вы рассказать о том, как выглядит ваш призыв к шаблону? Что такое структура URL? – SoluableNonagon

ответ

1

Попробуйте бежать два раза. Один побег будет удален как html() unescapes your String, см. here для справки.

'That\\'s cool'\">That's cool</h2>"; 

Теперь, когда вы используете .attr("ng-bind") следующий будет результат

view.headline || 'That\'s cool 

Является ли это ваш желаемый эффект, или будет только That&#039;s cool работа?

+1

Двойное ускорение решит проблему – funktioneer

0

Вы пробовали:

<!-- you can just escape the one apostrophe --> 
<h2 ng-bind="view.headline || 'That\'s cool'"></h2> 
+0

Это тот же результат – funktioneer

1

Другой способ:

Во-первых, отделить шаблон в другой файл, просто легче, что путь:

myTemplate.html

<h2 ng-bind="view.headline || 'That\'s cool'"></h2> 
<!-- you can just escape the one apostraphe, but really, 
this logic doesn't belong in the html, but rather the 
controller or service which assigns a value to view.headline --> 

Затем вы можете включить шаблон:

<div id="thisIsMyTemplatePlaceholder" ng-include="'myTemplate.html'"> </div> 

A Plunker показывая эту работу:

http://plnkr.co/edit/NlzTmlNMQCqHwqVxgCpQ?p=preview

+0

Это работает, но я все еще ищу способ сделать это с помощью jquery. Спасибо за план! – funktioneer