2013-02-07 12 views
66

Długo szukałem tego, ale albo nie mogę znaleźć odpowiedzi, albo jej nie rozumiem. Konkretny przykład wygra głos:)AngularJS: Wstaw HTML z ciągu znaków

  • Mam funkcję, która zwraca ciąg znaków HTML.
  • Nie mogę zmienić funkcji.
  • Chcę, aby html reprezentowany przez ciąg znaków został wstawiony do DOM.
  • Chętnie korzystam z kontrolera, dyrektywy, usługi lub cokolwiek innego, co działa (i jest rozsądnie dobrą praktyką).
  • Zastrzeżenie: Nie rozumiem $ kompilacji dobrze.

Oto co próbowałem:

// My magic HTML string function. 
function htmlString (str) { 
    return "<h1>" + str + "</h1>"; 
} 

function Ctrl ($scope, $compile) { 
    $scope.htmlString = htmlString; 
} 
Ctrl.$inject = ["$scope", "$compile"]; 

To nie działa.

próbowałem go jako dyrektywa TOO:

// My magic HTML string function. 
function htmlString (str) { 
    return "<h1>" + str + "</h1>"; 
} 

angular.module("myApp.directives", []) 
    .directive("htmlString", function() { 
    return { 
     restrict: "E", 
     scope: { content: "@" }, 
     template: "{{ htmlStr(content) }}" 
    } 
    }); 

    ... and in my HTML ... 

    <html-string content="foo"></html-string> 

Pomoc?

Uwaga

Patrzyłem na nich, między innymi, ale nie mógł tego dokonać.

Odpowiedz

80

Wystarczy popatrzeć na przykład w ten link:

http://docs.angularjs.org/api/ngSanitize.$sanitize

Zasadniczo kątowe ma dyrektywę wstawiania html na strony. W twoim przypadku można wstawić html za pomocą dyrektywy ng-bind-HTML tak:

Jeśli już zrobili to wszystko:

// My magic HTML string function. 
function htmlString (str) { 
    return "<h1>" + str + "</h1>"; 
} 

function Ctrl ($scope) { 
    var str = "HELLO!"; 
    $scope.htmlString = htmlString(str); 
} 
Ctrl.$inject = ["$scope"]; 

Następnie w html w zakresie tego kontrolera, ty mógł

<div ng-bind-html="htmlString"></div> 
+1

Dzięki! To się udało. Wprowadzono kilka zmian: Naprawiono link (bardzo dziwnie go parsowałem), zmieniono "ng-bind-html" na "ng-bind-html-dangerous" i dałem pełniejszy przykład. –

+7

To "ng-bind-html-dangerous" aż do 1.0.8, po tym jest po prostu 'ng-bind-html', ponieważ bezpieczne i niebezpieczne funkcje zostały scalone https://github.com/angular/angular.js/ blob/master/CHANGELOG.md # 120-rc1-spooky-giraffe-2013-08-13 – Matthew

+1

Otrzymuję ten błąd: https://docs.angularjs.org/error/$sce/unsafe in 1.3 –

13

można również użyć $sce.trustAsHtml('"<h1>" + str + "</h1>"'), jeśli chcesz poznać więcej szczegółów, proszę odnieść się do $sce