0

Я новичок в angularjs и использую эту директиву, как показано ниже. Когда эта директива загружается в файл HTML, она должна рассматривать этот HTML как фактический HTML, а не строку, но он не работает. Я использую угловую версию 1.4.7.Директива не загружает HTML-строку как актуальный HTML на AngularJS

Пожалуйста, помогите! Я добавляю ниже HTML как String, потому что я получаю этот HTML как String из службы динамически. Таким образом, это просто пример того, что я добавляю здесь, чтобы посмотреть, как мы можем отображать значение html в файле angularjs html, если оно идет как строка.

angular.module('my.directive', []) 
    .directive("myDirective", function(){ 
     return { 
      restrict: "EA", 
      scope: false, 
      template: "<div class='con'>"+ 
      "<div>'<p><i><strong>some text</strong></i></p>'</div>"+ 
      "</div>" 
     }; 
    }); 

Я пробовал несколько способов исправить это здесь, но не повезло. Я пробовал использовать «ng-bind-html-unsafe» и «ng-bind-html», но ни один из них не работает правильно.

Я даже попытался использовать прямой HTML с ng-bind-html и небезопасно, но не повезло и там.

Я просто попробовал под HTML, но это не работает.

<div ng-repeat="list in lists"> 
    <div class="content"> 
     <div ng-bind-html='<p><i><strong>some text</strong></i></p>'></div> 
    </div> 
</div> 

Также ниже не работает.

<div ng-repeat="list in lists"> 
    <div class="content"> 
     <div ng-bind-html-unsafe='<p><i><strong>some text</strong></i></p>'></div> 
    </div> 
</div> 

ответ

0

Внесены некоторые изменения в код.

template: "<div class='con'>" + 
       "<div><p><i><strong>some text</strong></i></p></div>" + 
       "</div>" 

AnuglarJS - Directives

Ограничить вариант, как правило, устанавливается:

  • 'A' - только матчи имени атрибута
  • 'E' - только совпадает с именем элемента
  • 'C' - соответствует только названиям классов

В вашей директиве, то есть это ограничение: restrict: "EA", то вы можете использовать в качестве элемента:

<my-directive></my-directive>.

(function() { 
 
    angular.module('my.directive', []) 
 
    .directive("myDirective", function() { 
 
     return { 
 
     restrict: "EA", 
 
     scope: false, 
 
     template: "<div class='con'>" + 
 
      "<div><p><i><strong>some text</strong></i></p></div>" + 
 
      "</div>" 
 
     }; 
 
    }) 
 
    .controller("Controller", ["$scope", 
 
     function($scope) { 
 
     $scope.title = "my-directive"; 
 
     $scope.lists = [{ 
 
      "id": 1, 
 
      "text": "1" 
 
     }, { 
 
      "id": 2, 
 
      "text": "2" 
 
     }]; 
 
     } 
 
    ]); 
 
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div data-ng-app="my.directive"> 
 
    <div data-ng-controller="Controller"> 
 
    <h1 data-ng-bind="title"></h1> 
 

 
    <div data-ng-repeat="list in lists"> 
 
     <div class="content">{{list.id}} 
 
     <my-directive></my-directive> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

jsFiddle


Update: Использование ngSanitize:

https://docs.angularjs.org/api/ngSanitize

В вашей текущей разметке вам нужно добавить двойные квесты ".

<div data-ng-bind-html="'<p><i><strong>some text</strong></i></p>'"></div> 

И добавьте зависимость ngSanitize в свой модуль.

Что-то вроде этого:

(function() { 
 
    angular.module("my.directive", ["ngSanitize"]) 
 
    .controller("Controller", ["$scope", 
 
     function($scope) { 
 
     $scope.title = "my-directive"; 
 
     $scope.lists = [{ 
 
      "id": 1, 
 
      "text": "1" 
 
     }, { 
 
      "id": 2, 
 
      "text": "2" 
 
     }]; 
 
     } 
 
    ]); 
 
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="https://code.angularjs.org/1.4.7/angular-sanitize.min.js"></script> 
 
<div data-ng-app="my.directive"> 
 
    <div data-ng-controller="Controller"> 
 
    <h1 data-ng-bind="title"></h1> 
 

 
    <div ng-repeat="list in lists"> 
 
     <div class="content"> 
 
     <div data-ng-bind-html="'<p><i><strong>some text</strong></i></p>'"></div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

Спасибо за ответ, но я думаю, что мой вопрос немного сбивает с толку. Я не думаю, что могу просто удалить '' из строки HTML, которая у меня есть, поскольку этот код исходит из моей службы динамически. Я просто запрограммировал эту ценность, чтобы убедиться, что вопрос менее сложный. Извините за путаницу здесь, но моя точка зрения, если я получаю эти значения HTML как String на моем контроллере/на директиве от службы, чем то, как я могу представить эти значения как HTML? – ree

+0

Я снова отредактировал вопрос и уточнил некоторые детали, чтобы он был менее запутанным. Спасибо за ответ здесь. Пожалуйста, помогите решить эту проблему. Я пробовал много вещей здесь, но пока не повезло. Пожалуйста помоги. – ree

+0

Я обновил свой ответ. Извините за путаницу. Надеюсь, это поможет. Кроме того, проверьте службу $ sce: https://docs.angularjs.org/api/ng/service/$sce. –