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.
