Mam element, z którym chciałbym powiązać HTML.
<div ng-bind-html="details" upper></div>
To działa. Teraz razem z nim mam również dyrektywę, która jest związana z powiązanym html:
$scope.details = 'Success! <a href="#/details/12" upper>details</a>'
Ale dyrektywa upper
z elementami div i anchor nie jest oceniana. Jak to działa?
angularjs
angularjs-directive
Amitava
źródło
źródło
Odpowiedzi:
Ja też borykałem się z tym problemem i po godzinach przeszukiwania internetu przeczytałem komentarz @ Chandermani, który okazał się rozwiązaniem. Musisz wywołać dyrektywę 'compile' z tym wzorcem:
HTML:
JS:
Możesz zobaczyć tutaj działające skrzypce
źródło
function(scope, element, attrs)
, skąd masz te trzy argumenty, zakres , element i atrybuty ?link
właściwości. Będą przekazywane automatycznie za każdym razem, gdylink
zostaną wywołane przez platformę Angular. Zawsze będą dostępne.$sce.trustAsHtml
z innej funkcji do tworzenia kodu HTML, który zostanie „skompilowany” z tą dyrektywą, powinieneś ją usunąć. Dzięki @apoplexyDzięki za świetną odpowiedź vkammerer. Jedną z optymalizacji, którą poleciłbym, jest cofnięcie oglądania po jednokrotnym uruchomieniu kompilacji. Znak $ eval w wyrażeniu obserwującym może mieć wpływ na wydajność.
Oto rozwidlone i zaktualizowane skrzypce.
źródło
.directive()
kod w kodzie zamieszczonym w odpowiedzi nie.$eval
- możesz po prostu użyćattrs.compile
bezpośrednio zamiast obserwowanej funkcji anonimowej. Jeśli podasz tylko wyrażenie tekstowe, angular i$eval
tak je wywoła .Dodaj tę dyrektywę angular-bind-html-compile
Użyj tego w ten sposób:
Naprawdę proste :)
źródło
Niestety nie mam wystarczającej reputacji, aby komentować.
Nie mogłem zmusić tego do pracy przez wieki. Zmodyfikowałem swój
ng-bind-html
kod, aby używać tej niestandardowej dyrektywy, ale nie udało mi się usunąć tego,$scope.html = $sce.trustAsHtml($scope.html)
co było wymagane do działania ng-bind-html. Jak tylko to usunąłem, funkcja kompilacji zaczęła działać.źródło
Dla każdego, kto ma do czynienia z treściami, które zostały już
$sce.trustAsHtml
tutaj omówione, muszę zrobić inaczejTo tylko
link
część dyrektywy, ponieważ używam innego układu. Będziesz musiał również wstrzyknąć$sce
usługę$compile
.źródło
Najlepsze rozwiązanie, jakie znalazłem! Skopiowałem to i działa dokładnie tak, jak potrzebowałem. Dzięki, dzięki, dzięki ...
w funkcji linku dyrektywy mam
aw szablonie dyrektywy:
źródło