Вставьте HTML в вид из контроллера AngularJS - PullRequest
778 голосов
/ 21 февраля 2012

Можно ли создать фрагмент HTML в контроллере AngularJS и показать этот HTML в виде?

Это связано с требованием превратить несогласованный большой двоичный объект JSON во вложенный список id : value пар. Поэтому HTML-код создается в контроллере, и теперь я хочу его отобразить.

Я создал свойство модели, но не могу отобразить его в представлении, просто не напечатав HTML.


Обновление

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

Пример контроллера:

var SomeController = function () {

    this.customHtml = '<ul><li>render me please</li></ul>';
}

Пример просмотра:

<div ng:bind="customHtml"></div>

Дает:

<div>
    "<ul><li>render me please</li></ul>"
</div>

Ответы [ 18 ]

3 голосов
/ 17 октября 2014

Вы также можете использовать ng-include .

<div class="col-sm-9 TabContent_container" ng-include="template/custom.html">
</div>

Вы можете использовать "ng-show" , чтобы показать скрытие данных этого шаблона.

3 голосов
/ 18 ноября 2014

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

product-specs.html

 <h4>Specs</h4>
        <ul class="list-unstyled">
          <li>
            <strong>Shine</strong>
            : {{product.shine}}</li>
          <li>
            <strong>Faces</strong>
            : {{product.faces}}</li>
          <li>
            <strong>Rarity</strong>
            : {{product.rarity}}</li>
          <li>
            <strong>Color</strong>
            : {{product.color}}</li>
        </ul>

app.js

 (function() {
var app = angular.module('gemStore', []);    
app.directive("     <div ng-show="tab.isSet(2)" product-specs>", function() {
return {
  restrict: 'E',
  templateUrl: "product-specs.html"
};
});

index.html

 <div>
 <product-specs>  </product-specs>//it will load product-specs.html file here.
 </div>

или

<div  product-specs>//it will add product-specs.html file 

или

<div ng-include="product-description.html"></div>

https://docs.angularjs.org/guide/directive

1 голос
/ 28 декабря 2017

вот решение сделать фильтр вот так

.filter('trusted',
   function($sce) {
     return function(ss) {
       return $sce.trustAsHtml(ss)
     };
   }
)

и примените это как фильтр к ng-bind-html, как

<div ng-bind-html="code | trusted">

и спасибо Рубену Декропу

1 голос
/ 23 октября 2016

Используйте

<div ng-bind-html="customHtml"></div>

и

angular.module('MyApp', ['ngSanitize']);

Для этого нужно включить angular-sanitize.js, например, в вашем html-файле с

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-sanitize.js"></script>
0 голосов
/ 06 апреля 2019

В Angular 7 + ionic 4 содержимое Html может быть показано с помощью «[innerHTML]»:

<div [innerHTML]="htmlContent"></div>

Надеюсь, это вам тоже поможет. Спасибо.

0 голосов
/ 31 января 2019

Просто используйте [innerHTML], как показано ниже:

<div [innerHTML]="htmlString"></div>

Прежде чем вам нужно было использовать ng-bind-html ...

0 голосов
/ 16 января 2018

Рабочий пример с каналом для отображения html в шаблоне с Angular 4.

1.Crate Труба escape-html.pipe.ts

`

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({name : 'keepHtml', pure : false})
export class EscapeHtmlPipe implements PipeTransform{
 constructor(private sanitizer : DomSanitizer){
 }
 transform(content){
  return this.sanitizer.bypassSecurityTrustHtml(content);
 }
}

` 2. Зарегистрируйте канал в app.module.ts

 import {EscapeHtmlPipe} from './components/pipes/escape-html.pipe';
    declarations: [...,EscapeHtmlPipe]
  1. Используйте в своем шаблоне

        <div class="demoPipe"  [innerHtml]="getDivHtml(obj.header) | keepHtml">
  2. getDivHtml() { //can return html as per requirement}

    Пожалуйста, добавьте соответствующую реализацию для getDivHtml в связанный файл component.ts.

0 голосов
/ 26 декабря 2017

Вот простая (и небезопасная) директива bind-as-html, без необходимости ngSanitize:

myModule.directive('bindAsHtml', function () {
    return {
        link: function (scope, element, attributes) {
            element.html(scope.$eval(attributes.bindAsHtml));
        }
    };
});

Обратите внимание, что это откроет проблемы безопасности, если вы связываете недоверенный контент.

Используйте вот так:

<div bind-as-html="someHtmlInScope"></div>
...