3

У меня есть пользовательская директива, согласно директиве листовки, так что я могу получить доступ к контроллеру:

restrict: 'E', 
require: '^leaflet', 
scope: { 

}, 
template: "", 
link: function(scope, element, attrs, controller) { 

} 

Когда я использую мою пользовательскую директиву в контроллере моего приложения без реализация ng-repeat работает нормально. Как это:

HTML контроллера без ng-repeat

<leaflet defaults="defaults" center="center" markers="markers" layers="layers" paths="paths"> 
    <ng-include src="/markers.html" /> 
    <my-directive 
    waypoints="wps"> 
    </my-directive> 
</leaflet> 

JS контроллера без ng-repeat

$scope.wps = [[32.745,-117.2776],[32.693,-117.3188]]; 

Однако, когда я пытаюсь добавить ng-repeat я в конечном итоге получаю следующее сообщение об ошибке:

HTML 298976918482914

контроллера с JS ng-repeat

<leaflet defaults="defaults" center="center" markers="markers" layers="layers" paths="paths"> 
     <ng-include src="/markers.html" /> 
     <my-directive 
      ng-repeat="(name, data) in routes" 
      name="{{ name }}" 
      waypoints="data.wps"> 
     </my-directive> 
    </leaflet> 

контроллера с ng-repeat

$scope.routes = { 
    r1: { 
    wps: [[32.745,-117.2776],[32.693,-117.3188]] 
    } 
} 

Что я облажался?

+0

Я предполагаю, что это потому, что ng-repeat создает новую область видимости. Вам необходимо передать свой листовой объект в качестве параметра – aorfevre

+0

Когда вы используете 'ng-repeat', для каждой строки создается новая область, и поскольку ваша дочерняя директива создает изолированную область, которая влияет на родительскую иерархию. Поскольку ваш ребенок выполняет 'require' на родительском директивном контроллере, эта проблема может возникнуть. – Chandermani

+0

@aorfevre, что вы имеете в виду передать объект листовки в качестве параметра? Где я могу это сделать? –

ответ

3

У вас есть <ng-include src="/markers.html" /> перед вашей директивой. Вам нужно явно закрыть этот тег. См. this bug report.

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