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]<javascript:>> 
> 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]<javascript:>. 
>
> > To unsubscribe from this group, send email to 
> > [email protected] <javascript:>. 
> > 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].
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