在上面的例子中,我期望从ng-repeat(ng-bind-html-unsafe)中获取具有相同行为的cls类元素,并明确设置一个。
<div ng-app="appp">
<div ng-controller="Ctrl">
<ul>
<li ng-repeat="r in data" ng-bind-html-unsafe="r.alink"></li>
</ul>
<div class="cls">External</div>
</div>
</div>
function Ctrl($scope) {
$scope.data = [
{alink: '<span><a class="cls">One</a></span>'},
{alink: '<span><a class="cls">Two</a></span>'}
];
}
angular.module('appp', [])
.directive('cls', function() {
return {
restrict: 'C',
replace: true,
scope: true,
link: function(scope, element, attrs) {
element.bind('click', function() {
alert('Aha!');
});
}
}
});
我想知道我在这里做错了什么?
答案 0 :(得分:5)
问题是Angular没有编译新的HTML。最简单的解决方案可能是使用$compile
服务手动编译动态内容。在自定义指令中执行此操作,并将ng-bind-html-unsafe="r.alink"
替换为htmlinsert="r.alink"
之类的内容。以下是该指令的编码方式:
angular.module('appp', [])
.directive('htmlinsert',function($compile){
return {
scope: {
htmlinsert: '='
},
link: function(scope,element,attrs){
var compiledElement = $compile(scope.htmlinsert)(scope);
element.append(compiledElement);
}
}
});
使用isolate scope绑定传递对html字符串的引用,然后在将其附加到重复DOM元素的当前迭代之前进行编译。