如何处理指令内部的点击事件?

How to handle click events from inside of the directive?

我有一个模态组件,它接受一个带有绑定的对象 (ng-model)。类似于:

<modal ng-model="modals.createContact"></modal>

我正在检查 $ctrl.ngModel.show 到 show/hide 模态:

<div class="modal" ng-show="$ctrl.ngModel.show" ng-transclude></div>

I show/hide 模式通过使用 ng-click 指令设置 modals.createContact.show:

<button ng-click="modals.createContact.show = true"></button>

但是这个解决方案很难维护。

我需要一个类似这样的指令来切换模态 show 属性:

<button modal="modals.createContact">Toggle modal</button>

指令应该监听元素(按钮)的点击事件然后切换 $ctrl.modal.show 属性.

切换的意思是:

$ctrl.modal.show = !$ctrl.modal.show;

如何使用指令实现这种情况?

要在指令中处理点击事件,请务必使用 $apply:

app.directive("myDirective", function() {
    return {
        link: postLink
    }
    function postLink(scope, elem, attrs) {
        elem.on("click", function(ev) {
            scope.$apply(function() {
                //code here
            });
        });
    }
})

AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才会受益于 AngularJS 数据绑定、异常处理、属性 监视等......您还可以使用 $apply() 来从 JavaScript.

输入 AngularJS 执行上下文

有关详细信息,请参阅