将点击事件绑定到 AngularJS 指令内的子元素

Binding click event to child element inside directive of AngularJS

我有以下指示。

(function () {
    'use strict';
    angular.module('ap.App')
        .directive('clearCancelFinishButtonsHtml', function () {
            return {
                scope: {
                    clearFunction: '='
                },
                replace: true,
                templateUrl: 'directives/clearCancelFinishButtons.html',
                link: function (scope, el, attrs) {
                    var clear= angular.element(el.find('button.clear'));
                    console.log(el.find('.clear'));
                    clear.bind("click", function () {
                        alert("here");
                    });
                }
            }
        });
})();

它指向 html 文件如下

<div class="row pull-right">
    <div class="col-lg-12 col-md-12 col-sm-12">
        <button type="button" class="custom-default clear">CLEAR</button>
        <button type="button" class="custom-danger">CANCEL</button>
        <button type="button" class="custom-info" ng-click="ap.save()">FINISH</button>
    </div>
</div>

我想要做的是在指令中获取带有 clear class 的按钮,然后将点击事件传递给它。出于某种原因,元素本身的单击事件似乎有效,但我无法控制子元素来绑定它。任何帮助将不胜感激。

PS。 我正在使用指令作为 <clear-cancel-finish-buttons-html id="{{$id}}" clear-function="'resetConfigurationPageInputs'"> </clear-cancel-finish-buttons-html>

更新------------

我希望发生这种情况,因为我希望能够从指令声明本身动态添加和删除函数。

你为什么不使用 ng-click?

如果你这样做

link: function (scope, el, attrs) {
  scope.clearClick = function () { alert('click') };
}

<button type="button" class="custom-default clear" ng-click="clearClick()">CLEAR</button>

然后调用函数

您在使用 jquery 吗?因为如果不是,那么 .find() 方法将仅适用于标签名称(因此 class 选择器将不起作用)。所以这里的问题是 el.find('.clear') 没有得到你的子元素。相反,像这样使用 document.querySelector

var clear= angular.element(el[0].querySelector('button.clear'));

如果您的项目中没有包含 jquery,那么您只能访问 jqlite。您可以在 jqlite docs.

中查看可以使用它做什么和不能做什么

谢谢大家的尝试,

我用下面的代码得到了它。

(function () {
    'use strict';
    angular.module('ap.App')
        .directive('clearCancelFinishButtonsHtml', function () {
            return {
                scope: {
                    clearFunction: '='
                },
                replace: true,
                templateUrl: 'directives/clearCancelFinishButtons.html',
                link: function (scope, el, attrs) {
                    var buttons=el.find('button');
                    angular.forEach(buttons, function(button){
                        var buttonEl=angular.element(button);
                        if(buttonEl.hasClass("clear")){
                            buttonEl.bind("click", function () {
                              alert("here");
                          });
                        }
                    })

                }
            }
        });
})();

编码愉快 ;)