javascript - 在 ng-repeat 中装饰 ng-click

标签 javascript angularjs angularjs-ng-repeat

我需要修饰 ngClickDirective 以添加自定义监听器。此代码适用于未嵌套在 ng-repeat 中的 ng-click:

$provide.decorator('ngClickDirective', ['$delegate', function ($delegate) {
    var original = $delegate[0].compile;
    $delegate[0].compile = function(element, attrs, transclude) {
        element.bind('click', function() {
            console.log('Tracking this');
        });
        return original(element, attrs, transclude);
    };
    return $delegate;
}]);

ng-click 嵌套在 ng-repeat 中时,是否有任何方法可以使此 bind 工作?

显示问题的简单 plnkr:http://plnkr.co/edit/hEkBHG7pcJfoXff523Yl?p=preview

最佳答案

出于性能原因,ng-repeat 将只编译原始元素一次。然后只需克隆该元素并对集合中的每个项目进行链接。

因此,您必须在 link: 函数而不是像这样的 compile: 添加自定义监听器:

$provide.decorator('ngClickDirective', ['$delegate', function ($delegate) {
    var originalCompile = $delegate[0].compile;
    $delegate[0].compile = function() {
        var originalLink = originalCompile.apply(this, arguments);

        return function postLink(scope, element, attr) {
          element.bind('click', function() {
              alert('hello!');
          });

          return originalLink.apply(this, arguments);
        };
    };
    return $delegate;
}]);

示例 Plunker: http://plnkr.co/edit/aGbB5LuJNtdL9JXtwNSV?p=preview

关于javascript - 在 ng-repeat 中装饰 ng-click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281563/

相关文章:

javascript - 如何从跨浏览器的html字符串获取html字符串?

javascript - 根据单击的标题在 Angular4 中排序

javascript - 隐藏输入和 AngularJS ng-model 绑定(bind)

javascript - Angular 错误 : [$compile:tpload] Failed to load template

AngularJS - 一个简单的无限滚动

javascript - 返回当前位置 x 英里半径内的地点列表

javascript - 为什么需要应用内存功能?

javascript - 错误 : The shape of dict ['input' ] provided in model.execute(dict) 必须是 [1,224,224,3],但实际上是 [1,244,244,3]

javascript - Angular.js。如何计算满足自定义过滤器的 ng-repeat 迭代次数

javascript - AngularJS 嵌套 ng-repeat 范围与自定义指令