也许是棘手的头衔...
例如,我们可以使用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中解决这个问题? 谢谢!
答案 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();
但在我的例子中,我手动创建了所有项目,因此我必须手动进行数据绑定。