Consider two nested directives with isolate scopes:
<dctv1>
    <dctv2></dctv2>
<dctv1>
If I want dctv2 to talk to dctv1 I have may options:
dctv1 in the definition of dctv2 using the require:'^dctv1'
<dctv2 callParent="hello()"></dctv2> and scope:{callParent:'&'}
$scope.$emit in dctv2 but then all parent scopes will hear the message.Now I want dctv1 to talk to dctv2. 
$scope.$broadcast, but then all children will hear.By talk to here i mean call a function or similar. Don't want to set up watches clogging the digestloop.
How can I make dctv1 notify dctv2 in the best way, making them loose-coupled? I should just be able to remove dctv2 without errors.
Take a look at AngularJS NgModelController for some ideas.
Each <dctv2> directive would require <dvtv1> to have it's controller injected. You can then add objects or callbacks to properties of that controller, and remove them when <dctv2> is destroyed.
<dvtv1> would not talk directly to children, but would trigger callbacks bound to it's properties.
For example;
NgModelController has $parsers and $formatters that are an array of function callbacks. You push your own functions into the array to extend that controllers behavior.
When NgModelController performs input validation it's basically talking to other directives via these properties.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With