我有一个Angular控制器CanvasController
建模画布,可以在其上放置“小部件”。
控制器维护一个对象文字的简单数组_currentWidgets
,该数组对应于当前在画布上的小部件。例如[ {id: 1} ]
。
CanvasDirective
与CanvasController
绑定,并在链接函数中的数组currentWidgets
上放置一个Angular监视。这意味着在添加和删除小部件时会重新渲染画布。
画布模板包含以下行以呈现小部件:
<div ng-include="'widget-template'" ng-repeat="widgetModel in currentWidgets" />
小部件模板定义如下:
<div ng-controller="widgetController as widgetCtrl">foo</div>
我的理解是,这意味着无论何时将新项添加到currentWidgets,Angular都会实例化WidgetController
的新实例,以供新窗口小部件使用。
我的问题 - 如何在CanvasController
中创建模型,并在添加小部件时实例化WidgetController
的新实例?或者这不是惯用的,我应该在WidgetController
内为小部件实例化一个单独的模型吗?
答案 0 :(得分:1)
在您的情况下,它可能已经已经共享。参见原型继承。 据我所知,你的小部件的范围应该是canvas指令的子代,对吧?
快速解决方案是在父级中创建一个方法,javascript的原型继承应该从子级查找方法到父级。
或发送活动......
控制器的作用是扩展范围,可能来自$ rootScope。
这意味着您的控制器范围是$ rootScope的子级。您可以尝试$ rootScope。$ broadcast()或scope。$ emit()。这是一种方式,通过发送事件。
$ emit()将从子范围向上发送到$ rootScope的事件。 $ broadcast()将从父级向下发送事件。