Thanks Sonny, interesting reading.
I see a few drawbacks in you approach (correct me if I'm wrong) applied to 
my needs:

   - As long as no interface is declared, there is a risk that I can call a 
   method with same name on an unaware controller (not a "child controller").
   - The message is still a broadcast, this does not solve my flow problem.
   Oversimplifying: 
     if (child[i].getResult() > 0 && child[i].isNotBlocking()) 
         child[i+1].doSomeStuff();
   - The traverse is executed every time RegisterHook is called

The solution I'm trying to implement would rather couple the directive's 
controllers if possible.

On Wednesday, February 19, 2014 5:14:21 PM UTC+1, Sonny Michaud wrote:
>
>  I have done something similar and decided to create a generalized 
> hooking mechanism.  In this way, you can define hook points in the parent 
> controller and simply define methods on the child controller scope that 
> will be automatically called at the appropriate point in time.  You can 
> then do whatever you want with the results from the child controllers, if 
> need be, or simply discard them.  I also discuss the tradeoffs between this 
> approach, shared state in services, and sending events back and forth.  You 
> can see my write up here:  
> http://sonnym.github.io/2014/02/05/hooks-in-angularjs-controllers/
>
> - Sonny
>
> On 02/19/2014 11:09 AM, [email protected] <javascript:> wrote:
>  
>  I'm creating a directive that needs to interact with children directives 
> generated through a template.
>
>   <div my-parent="config" />
>
>  config is an object that defines:
>  
>    - the parent model
>     - his controller (eg. AnnoyngParent_Ctrl) that extends 
>    BaseParent_Ctrl (and optionally a set of decorators)
>     - a template e.g.   
>    <h1>parent.title</h1>  
>    <ng-repeat="child in parent.children" my-child="child" />
>     - a list of children. Each child has a controller (eg. 
>    LazyChild_Ctrl), a model and a template
>     
>  In both directives link functions I do add the controller and I compile 
> the template.
>  
>  It's quite easy to have children communicate with their parent (scope 
> inheritance and $emit in the child controller, require "^myParent" + 
> controller in the link phase of the directive).
> Having the parent interact with their children is not as easy. $broadcast 
> is an option for generic commands, not for more complex flows where at some 
> point the parent needs to interact with a single child and do some 
> conditional operation.
> The second option we evaluated was using a shared service (or a 
> combination of service and broadcast) but this makes the flow control 
> cumbersome.
>  
>  The last one we come through is to have the children "register" to the 
> parent controller ( $scope.registerAsChild(this); ). While this seams a 
> bad approach I've seen that something similar is used in the 
> ngSwitch-ngSwitchWhen directives.
> Is there any flaw in this approach?
>  Any alternative solution?
>
>  
> On Thursday, May 24, 2012 5:39:07 AM UTC+2, Vojta Jína wrote: 
>>
>> You can't access child scopes from parents. 
>> There are reasons for that (eg. easier memory management - we can 
>> easily throw away a child scope, without leaking memory). 
>>
>> Just do what Peter suggested. Define the property on parent scope and 
>> access it from child scopes. Scopes inherit prototypically. 
>> See this: http://jsfiddle.net/yjVD9/1/ 
>>
>> V. 
>>
>>
>> On Tue, May 15, 2012 at 12:20 PM, Alexander Wilms <[email protected]> 
>> wrote: 
>> > All, I am working on a dashboard that includes several "modules" with 
>> > different contents, e.g. users tasklist, users calendar etc. The 
>> dashboard 
>> > itself has a navigation menu and some additional features. Each module 
>> is 
>> > implemented as it's own controller and template, so they can be re-used 
>> in 
>> > other pages of the same application. So the app structure is like: 
>> > <MainController with navigation menu and app header> 
>> >  <TasklistController/> <CalendarController/> <OtherControllers/> 
>> > </MainController> 
>> > Now I'd like to some data from the "child modules" to be displayed in 
>> the 
>> > parent controller, e.g. show the number of tasks in the app header. 
>> While I 
>> > found some posts describing how to inherit data from the parent to the 
>> child 
>> > controllers I'd like to have it the other way round. How can that be 
>> > achieved?  (I am both a newbie to Angular and a designer, not a 
>> developers, 
>> > so please keep it simple :-) 
>> > Thanks so much, 
>> > Alex 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> Groups 
>> > "AngularJS" group. 
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msg/angular/-/PpWzqLkzp98J. 
>> > To post to this group, send email to [email protected]. 
>> > To unsubscribe from this group, send email to 
>> > [email protected]. 
>> > For more options, visit this group at 
>> > http://groups.google.com/group/angular?hl=en. 
>>
>  -- 
> You received this message because you are subscribed to the Google Groups 
> "AngularJS" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected] <javascript:>
> .
> Visit this group at http://groups.google.com/group/angular.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> 

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to