2016-11-24 2 views
0

Я пытаюсь добавить что-то вроде динамического HTML с помощью нг-связывания-HTML, но он не работает с $ объемом переменной

Вот мой Угловой код

1) Мой контроллер

$scope.name = "Parshuram" 
$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>"); 

Кроме того, что моя строка является динамическим

"<div><table class=" + "\"table table - bordered table - responsive table - hover add - lineheight table_scroll\"" + "><thead><tr><td>Name</td><td>Age</td></tr></thead><tbody><tr ng-repeat=" + "\"tr in dyna\"" + "><td>{{tr.name}}</td><td>{{tr.age}}</td></tr></tbody></table></div>" 

Так я не могу заме е каждая переменная с $ объем

2) - Мой HTML

<div ng-app="mymodule" ng-controller="myModuleController"> 
    <div ng-bind-html="thisCanBeusedInsideNgBindHtml"></div> 
</div> 

Я получил этот выход

{{name}} 

Мой ожидается выход

Parshuram 

Пожалуйста, кто может помочь я застрял в этой точке, делает ли это $ sce не привязанной переменной области? ..

+0

Если вы получаете этот html с сервера и можете заставить сервер возвращать ответ, который является именно вашим html, тогда просто используйте 'ng-include =" '// theserver/somepage' "' и что выберет html и включит его в качестве шаблона. – Duncan

+0

вы можете объяснить, что подробно это моя служба с возвратом html string –

+0

$ http.get ('http: // localhost: 22475/api/mymodule'). Then (function (response) { console.log (response. данные);}); –

ответ

2

Я создал рабочую plnkr здесь: https://plnkr.co/edit/uOdbHjv1B7fr0Ra1kXI3?p=preview

проблема заключается в том, что нг-связывать-HTML не связан с областью. , вы должны вручную скомпилировать контент.

действительное и многоразовое решение должно создавать директиву без использования каких-либо внешних модулей.

function compileTemplate($compile, $parse){ 
    return { 
     link: function(scope, element, attr){ 
      var parsed = $parse(attr.ngBindHtml); 
      function getStringValue() { return (parsed(scope) || '').toString(); }  
      scope.$watch(getStringValue, function() { 
       $compile(element, null, -9999)(scope); 
      }); 
     } 
    } 
    } 




<div ng-app="mymodule" ng-controller="myModuleController"> 
    <div ng-bind-html="thisCanBeusedInsideNgBindHtml" compile-template></div> 
</div> 
+0

Нет, это тоже не работает для меня, все еще давая {{name}} –

+0

вы пробовали отлаживать? вы получили какие-либо ошибки? – Karim

+0

Нет ошибок, но все равно выводятся {{name}} –

0

ng-bind-html делает то, что он говорит на олове: он связывает html. Он не связывает угловой шаблон кода в вашем доме.

Вы должны сделать это вместо того, чтобы:

$scope.thisCanBeusedInsideNgBindHtml = 
    $sce.trustAsHtml("<div>"+$sanitize(name)+"</div>"); 

Чтобы сделать это, вы хотите включить модуль ngSanitize из яваскрипта angular-sanitize.js. См. https://docs.angularjs.org/api/ngSanitize

Если вы хотите вставить некоторый html, содержащий угловые директивы, тогда вы должны написать свою собственную настраиваемую директиву для этого.

+0

Мне нужно добавить sanitize.min.js для этого ?? –

+0

Вам понадобится угловое санитирование, но на самом деле вам следует подумать, можете ли вы делать то, что вам нужно, с помощью настраиваемой директивы (или компонента). – Duncan

+0

Я отправляю строку с моего сервера, поэтому не могу выбрать директиву –

0

В вашем HTML просто использовать {{имя}} на {{вар}} обозначение будет использоваться в HTML-коде, чтобы оценить эту переменную.

+0

Нет, я не хочу использовать в html моя строка HTML приходит с моего сервера, и я хочу связать ее с html –

0

Вы можете сделать:

$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml('<div ng-bind="name"></div>'); 
+0

мой вопрос в том, как я могу привязать переменную области видимости с помощью $ sce html-bind –

+0

Я только что отредактировал свой ответ, пожалуйста, проверьте его – trichetriche

+0

, пожалуйста, проверьте мой вопрос. Я хочу, чтобы моя переменная области привязки была привязана, потому что я отправляю строку с моего сервера и привязываю ее с помощью html, если любой другой способ, чтобы я мог отправить некоторую строку и изменить мое имя как изменение переменной области, но я хочу отправить строку html –

0

К сожалению я сделать еще один ответ.

Если у вас есть

$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml("<div>{{name}}</div>"); 

Затем вы можете сделать

var str = "<div>{{name}}</div>"; 
var output = str.replace('{{name}}', $scope.name); 

Это, кажется, единственный вариант.

+0

Извините, я не могу заменить здесь. Здесь моя строка html может быть что угодно, например, для этого «

NameAge
{{tr.name}}{{tr.age}}
, поэтому я не могу заменить каждую переменную –

+0

ЕСЛИ это не читаемо, проверьте мой обновленный вопрос –

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