Я пытаюсь построить динамические строки HTML, которые включают директиву, которая реагирует на изменения в переменной области. Если я строю строки статически, то мой $watch
работает правильно, но если строки динамические, то $watch
никогда не срабатывает.AngularJS: Использование директив в динамическом HTML
Я уверен, что ответ лежит где-то в использовании $compile
, и я изучил многочисленные примеры, но я не могу заставить их работать для моих конкретных потребностей.
Возможно ли это?
Мой plunkr, который демонстрирует ссылки на предложения с надстрочным тегом.
index.html
<body ng-controller="MainCtrl">
<h3>Static Example</h3>
<div>Humpty Dumpty sat<ref><sup>1</sup></ref> on a wall.</div>
<div>Humpty Dumpty had a great<ref><sup>2</sup></ref> fall.</div>
<h3>Dynamic Example</h3>
<div ng-repeat="item in dynamic">
<span ng-bind-html="item | to_trusted"></span>
</div>
<br>
<input type="checkbox" ng-click="sup = !sup"> hide/show
</body>
app.js
var app = angular.module('app', [])
.filter('to_trusted', ['$sce', function($sce) {
return function(text) {
return $sce.trustAsHtml(text);
};
}]);
app.controller('MainCtrl', function($scope) {
$scope.sup = true;
$scope.dynamic = ["Humpty Dumpty sat on a wall.<ref><sup>1</sup></ref>",
"Humpty Dumpty had a great fall.<ref><sup>2</sup></ref>"];
});
app.directive('sup', function($compile) {
return {
restrict: 'E',
link: function(scope, element) {
scope.$watch('sup', function() {
element.css({ display: scope.sup ? 'inline' : 'none' });
});
}
}});
Я не знаю, если это любой связанной с ними, но я думаю, что это может быть полезно http://stackoverflow.com/questions/26447885/how-directives-are-invoked-if -an-element-that-contains-a-directive-is-added-dyna –
@KevinB Достаточно честный. – ScottD
Возможный дубликат [угловой ng-bind-html-небезопасный и директива внутри него] (http://stackoverflow.com/questions/17417607/angular-ng-bind-html-unsafe-and-directive-within-it) –