У меня есть пользовательская директива, согласно директиве листовки, так что я могу получить доступ к контроллеру:
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
я в конечном итоге получаю следующее сообщение об ошибке:
контроллера с 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]]
}
}
Что я облажался?
Я предполагаю, что это потому, что ng-repeat создает новую область видимости. Вам необходимо передать свой листовой объект в качестве параметра – aorfevre
Когда вы используете 'ng-repeat', для каждой строки создается новая область, и поскольку ваша дочерняя директива создает изолированную область, которая влияет на родительскую иерархию. Поскольку ваш ребенок выполняет 'require' на родительском директивном контроллере, эта проблема может возникнуть. – Chandermani
@aorfevre, что вы имеете в виду передать объект листовки в качестве параметра? Где я могу это сделать? –