Event Delegation Directive
I am puzzled by how you use item both inside and outside ng-repeat. 

Each iteration of ng-repeat has its own scope, so its own item. For instance, if items = [item1, item2], which item do you mean to use inside doSomething? 
The way it is used now, the item seen by that function will be another item on the outside scope. If this is the intention, this variable should be named differently:

&lt;ul evt-delegate="doSomething(outsideItem)" evt-selector="li"&gt;
  &lt;li ng-repeat="item in items"&gt;{{item.name}}&lt;/li&gt;
&lt;/ul&gt;




UPDATE. Having another look I see better what you are trying to achieve. Still I would improve design by making the directive more re-usable. 

You basically want to throw any HTML inside the directive and pick the model associated with event's target. The directive makes this model available on the scope of your expression doSomething(model).  Just like $event made available inside the ng-click. I would then mark this model as something special like:

&lt;ul evt-delegate="doSomething($my-target-model)"&gt;


Then it is the job of the directive to pick the right model and make it available under this name. This way I can change item to my-item inside ng-repeat without breaking things, so the directive is more encapsulated and re-usable.