将click事件绑定到AngularJS的指令中的子元素

时间:2016-05-06 19:54:12

标签: javascript angularjs jqlite

我有以下指令。

(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类的按钮并向其传递一个click事件。由于某种原因,单击事件到元素本身似乎工作,但我无法得到子元素的绑定来绑定它。任何帮助将不胜感激。

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

UPDATE ----------

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

3 个答案:

答案 0 :(得分:1)

谢谢大家的尝试,

我使用以下代码。

std::unordered_map<std::string, EdgeS> edges;

// Some extra stuff

EdgeS* Node::insertEdge(Node* to)
{
    EdgeS edge = edges[to->name];
    if(!edge.to)
        edge.to = to;
    edge.frequency++;
    edge.packets_number++;
    return &edge;
}

快乐的编码;)

答案 1 :(得分:0)

为什么不使用ng-click?

如果你这样做

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

<button type="button" class="custom-default clear" ng-click="clearClick()">CLEAR</button>
然后它调用函数

答案 2 :(得分:0)

你正在使用jquery吗?因为如果没有,则.find()方法仅适用于标记名称(因此类选择器不会起作用)。所以这里的问题是el.find('.clear')没有得到你的孩子元素。相反,请使用document.querySelector,如下所示:

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

如果您未在项目中包含jquery,那么您只能访问jqlite。您可以在jqlite docs中看到可以做什么和不能做什么。