Я пытаюсь добавить маркеры на карте динамически на карте, используя нг-повторение внутри нг-карты следующим образом,Настройка различных иконок карты маркеров на основе значения нг повтора переменной
<div id="map-canvas">
<ng-map default-style="true">
<marker id='ID{{school.id}}' ng-repeat="school in vm.schools" position="{{school.location}}" on-click="vm.showDetail(school)" icon="assets/img/marker-excellent.png">
</marker>
<info-window id="marker-info">
<div ng-non-bindable="">
<h5>{{vm.school.name}}</h5>
</div>
</info-window>
</ng-map>
</div>
Вот это создает несколько маркеров с тем же значком маркера. Я хочу использовать разные значки маркеров на основе значения {{school.rating}}. Однако я не могу понять, как изменить значок значка маркера на основе значения рейтинга, в то время как ng-repeat в действии отображает маркеры на карте.
В настоящее время я делаю следующее, но я считаю, что это неэффективный метод его выполнения.
<div id="map-canvas">
<ng-map default-style="true">
<marker id='ID{{school.id}}' ng-if="school.overallRating >= 4.5" ng-repeat="school in filteredSchools = (search.schools | filter:boardsFilter)" position="{{school.location}}" on-click="search.showDetail(school)" icon="assets/img/marker-excellent.png">
</marker>
<marker id='ID{{school.id}}' ng-if="school.overallRating < 4.5 && school.overallRating >= 3.5" ng-repeat="school in filteredSchools = (search.schools | filter:boardsFilter)" position="{{school.location}}" on-click="search.showDetail(school)" icon="assets/img/marker-good.png">
</marker>
<marker id='ID{{school.id}}' ng-if="school.overallRating < 3.5 && school.overallRating >= 2.0" ng-repeat="school in filteredSchools = (search.schools | filter:boardsFilter)" position="{{school.location}}" on-click="search.showDetail(school)" icon="assets/img/marker-average.png">
</marker>
<info-window id="marker-info">
<div ng-non-bindable="">
<h5>{{vm.school.name}}</h5>
</div>
</info-window>
</ng-map>
</div>
Здесь я поставил несколько директив Marker каждый из которых имеет нг-повтор, но разные условия использования нг-если
мне интересно, если есть более эффективный способ сделать это с помощью одной директивы маркера с ng-repeat
Вы уже пытались добавить поле в школу объекта (например, 'marker_type'), содержащий информацию о маркере, чтобы быть а затем привязать атрибут значка к этому полю? (например, icon = "assets/img/{{school.marker_type}}. png") – beaver
Это не даст требуемой функциональности, так как тип маркера является динамическим и зависит от рейтинга. Следовательно, БД не может хранить тип маркера для каждой школьной строки. Даже если он сохранит его, он будет постоянно контролироваться, чтобы обновляться в случае изменения значения рейтинга. Так что это не динамическое решение. – Avi
Да, но я думаю, что данные из БД могут быть извлечены из бэкэнд-сервиса, который мог бы связать динамически (вычислять) поле 'marker_type' для каждой записи (школы). Однако решение, предложенное Вадимом Гремячевым, является хорошим подходом на стороне клиента. – beaver