AngularJs用于多个DOM /范围的一个控制器

时间:2013-11-28 07:17:24

标签: javascript angularjs dom angularjs-scope

也许是棘手的头衔...

例如,我们可以使用Google Maps Api v3。

我有一系列JSON对象,包含各个城市的坐标和信息。 如果我想为所有InfoWindow内容创建一个控制器(每个内容的逻辑相同,但只有数据不同),该怎么办。

要点:在每个InfoWindow中,我想与每个位置的信息“沟通”。所以我想拥有一个Controller并构建多个$ scope实例。

我可以通过父控制器将控制器绑定到InfoWindow内容加载模板:

$con = $compile(HTML)($scope);

然后将$ con [0]作为内容推送到InfoBox(或Window)内容中。 其中HTML可以是例如:

<div ng-controller="CustomCtrl">
    {{city().name}}
</div>

问题是如何将自定义变量/对象推送到CustomCtrl? 那个变量可以是任何变量。在架构中逻辑结构将是相同的,但从技术上讲,它必须是各种对象。

我试图这样做:

var content = $con[0].copyNode(false); // or true
content.customVariable = <Anything here>;
var infobox = new InfoBox({content: content,...});

我没有通过$ element [0] .customVariable访问“CustomCtrl”。

我如何在AngularJS中解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

嗯......我自己想出来了。

我的任务必须要做的第一件事是我必须每次为每个标记编译$, 之后,当我初始化InfoBox(-Window并不重要)时,我得到了那个内容实例。

然后我可以确定InfoBox内容为 html内容,作为DOM元素,必须是唯一的实例,而不是同一个

var elem = angular.element(city.infobox.getContent());
elem.scope().customVariable = <Anything here>

然后可以在“CustomCtrl”代码中访问此customVariable;)

就像绑定到每个ng-repeat“项目中的项目”一个控制器:

<li ng-repeat="item in items" ng-controller="ItemCtrl">
    {{item.name}}
</li>

每个将在ItemCtrl闭包中作为单独的$ scope,并且item可以在那里访问:

$scope.item.any_param_or_fn();

但在我的例子中,我手动创建了所有项目,因此我必须手动进行数据绑定。