Angular-UI $scope.myMap не определен

Я пытаюсь $watch myMap, но это не срабатывает. Я сузил его до использования ui-if (если я удалю ui-if, $scope.myMap будет правильным объектом Google Maps). Однако мне нужно сохранить ui-if, чтобы заставить ui-map дождаться завершения моего запроса AJAX/Db.

Почему myMap не добавляется в область действия (и как это сделать)?

Планкер

Изменить Я вижу из эту проблему GitHub этот ui-if создает свою собственную область видимости. Итак, как мне получить доступ к его области действия/где сейчас живет myMap? Кроме того, почему ui-if создает новую область?


person Jakob Jingleheimer    schedule 31.01.2013    source источник


Ответы (2)


Создайте модель на вашем контроллере GoogleMaps:

$scope.model = {};

Передайте модель как ссылку на директиву ui-map:

ui-map="model.myMap"

Следите за изменениями:

$scope.$watch('model.myMap', function(map){
    ...
}

Таким образом вы избегаете создания свойства myMap внутри области ui-if.

Также ознакомьтесь с этой документацией для получения дополнительной информации о прототипном наследовании областей.

person bmleite    schedule 31.01.2013
comment
Ах ах! Теперь доступен объект myMap (как и объект местоположения); вроде бы все идет как по маслу, но затем маркеры не появляются на карте: plnkr.co/edit/khlQVB Я попытался проверить объект google-map того, у которого были маркеры для сравнения с моими (чтобы узнать, зарегистрировал ли их мой объект карты), но я не смог выяснить, какое свойство содержит данные маркера (думал, что это может быть в overlayMapTypes или qc. - person Jakob Jingleheimer; 31.01.2013
comment
догадаться! вместо установки var latLng = new google.maps.LatLng( $scope.locations[i][0],$scope.locations[i][1]); мне пришлось держать каждый $scope.locations[i][#] в своем собственном параметре, а ЗАТЕМ запускать new google.maps.LatLng. - person Jakob Jingleheimer; 31.01.2013

Вы можете указать, где вы хотите хранить объект, в том числе в родительской области:

ui-map="$parent.myMap"

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

person ProLoser    schedule 31.01.2013
comment
о, это приятно знать (что я могу таким образом указать хранить его в родительской области). Спасибо! Я думаю, что предпочел бы установить его в свойство объекта. Ответ @bmleite, похоже, именно такой, но, как ни странно, маркеры не отображаются на карте. - person Jakob Jingleheimer; 31.01.2013