2013-11-28 2 views
1

Может быть сложно название ...AngularJs один контроллер для нескольких DOM/scope

Например, можно использовать Google Maps Api v3.

У меня есть массив объектов JSON с координатами и информацией для разных городов. Что делать, если я хочу создать ОДИН контроллер для всего содержимого InfoWindow (логика каждого контента одинакова, но только данные различаются).

Главное: в каждом InfoWindow я хочу «обмениваться» информацией о каждом местоположении. Поэтому я хочу иметь один контроллер и создавать несколько экземпляров $ scope.

можно связать контроллер в InfoWindow шаблон загрузки содержимого там через родительский контроллер:

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

Затем нажатие $ кон [0] в качестве содержимого в инфобоксе (или окно) содержание. где 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,...}); 

И я ничего не имею на доступ в "CustomCtrl" на $ элемента [0] .customVariable.

Как решить эту проблему в AngularJS? Спасибо!

ответ

0

Ну ... Я подумал об этом сам.

Первое, что должно быть сделано для моей задачи, - это то, что я должен компилировать каждый раз каждый маркер, после этого, когда я инициализировал InfoBox (-Window не имеет значения), я получаю этот экземпляр содержимого.

И тогда я могу знать наверняка, что содержание InfoBox как содержание HTML, так как DOM элемент, должен быть с уникальным экземпляром, не то же самое один:

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

Этот customVariable будет доступен, то в " CustomCtrl»код;)

это вроде как привязать к каждой нг-повтора„элемента в пунктах“контроллера:

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

Каждый будет как отдельный $ сфера в ItemCtrl закрытия и item может быть accesable там:

$scope.item.any_param_or_fn(); 

Но в моем примере я создал вручную все детали, поэтому я должен сделать, что связывание данных вручную.

Смежные вопросы