我之前解决此类问题的方式是
inheritedData用于与点击处理程序进行通信,无论它是内在还是外在:
在事物的自定义指令中,使用jqLite数据(例如)将数据变量添加到元素
element.data('myThing',true)。如果要在事物的多个实例之间进行区分,则可能需要使用一些唯一生成的密钥。在同一自定义指令中,在document.body的click事件处理程序中,您可以检查
angular.element(event.target).inheritedData('myThing')
下面是使用此技术的示例指令
app.directive('thing', function($document,$window) { return { restrict: 'E', template: '<div><span>Inner thing</span></div>', replace: true, link: function(scope,element) { element.data('thing',true); angular.element($document[0].body).on('click',function(e) { var inThing = angular.element(e.target).inheritedData('thing'); if (inThing) { $window.alert('in'); } else { $window.alert('out'); } }) } }});并可以在此Plunker中看到http://plnkr.co/edit/bRDLcLoesM7Z0BIxKxYu?p=preview



