共享AngularJS模型

时间:2014-08-18 11:43:05

标签: angularjs models

我有一个Angular控制器CanvasController建模画布,可以在其上放置“小部件”。

控制器维护一个对象文字的简单数组_currentWidgets,该数组对应于当前在画布上的小部件。例如[ {id: 1} ]

CanvasDirectiveCanvasController绑定,并在链接函数中的数组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内为小部件实例化一个单独的模型吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,它可能已经已经共享。参见原型继承。 据我所知,你的小部件的范围应该是canvas指令的子代,对吧?

快速解决方案是在父级中创建一个方法,javascript的原型继承应该从子级查找方法到父级。

或发送活动......

控制器的作用是扩展范围,可能来自$ rootScope。

这意味着您的控制器范围是$ rootScope的子级。您可以尝试$ rootScope。$ broadcast()或scope。$ emit()。这是一种方式,通过发送事件。

$ emit()将从子范围向上发送到$ rootScope的事件。 $ broadcast()将从父级向下发送事件。