javascript - AngularJS 指令可以从动态内容中获取类名吗?

标签 javascript html angularjs angularjs-directive angularjs-compile

http://jsfiddle.net/xKU5R/

在上述情况下,我期待带有 cls 的元素从 ng-repeat 中以相同行为拾取的类( ng-bind-html-unsafe ),并显式设置一个。

<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!');
            });
        }
    }
});

我想知道我在这里做错了什么?

最佳答案

问题是 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); 
        }
    }
});

对 html 字符串的引用使用隔离范围绑定(bind)传递,然后在附加到重复的 DOM 元素的当前迭代之前进行编译。

演示 : http://jsfiddle.net/sh0ber/CLEqc/

关于javascript - AngularJS 指令可以从动态内容中获取类名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929669/

相关文章:

AngularJS。选择具有NG-Model属性时,NG选择不起作用

javascript - javascript中变量名后面的*是什么

php - 如何通过使用 php、javascript、wsdl 调用 Web 服务来发送电子邮件?

html - Angular 7 组件 : how to detect a change by user interaction?

html - 如何使用 Bootstrap 创建列之间有边距的列

javascript - 如何在 angular.bootstrap() 之后设置 $rootScope 的值

javascript - 使用 angular.js 中的输入从指令调用 Controller

javascript - 在不使用 CSS 相对定位的情况下在链接图像之上放置文本?

javascript - 正则表达式排除某些标签

javascript - 为乘法元素javascript设置默认值