Не рендерится google maps

363
24 ноября 2016, 10:28

Почему иногда карта не рендерится, а просто серого цвета. Чаще всего случается когда сначала открываешь карту toggleRestsMap = false, потом показать рестораны toggleRestsMap = true, а потом снова показать карту toggleRestsMap = false
В чем проблема ? Ошибок в консоли нету.

Код:

map = new google.maps.Map(document.querySelector(classMap), {
            zoom: 4,
            center: {lat: 0, lng: 0}
        });
        angular.forEach(rests, function (rest) {
            var cuisines = '';
            angular.forEach(rest.cuisines, function (cuisine) {
                cuisines += cuisine.name + ', ';
            });
            var contentString = '<div id="content">'+
                '<h1 id="firstHeading" class="firstHeading">' + rest.name + '</h1>'+
                '<div id="bodyContent">'+
                '<p><b>' + cuisines + '</b></p>'+
                '</div>'+
                '</div>';
            var infowindow = new google.maps.InfoWindow({
                content: contentString
            });
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(rest.lat, rest.lng),
                map: map,
                icon: image,
                title: rest.name
            });
            marker.addListener('mouseover', function() {
                infowindow.open(map, marker);
            });
            marker.addListener('mouseout', function() {
                infowindow.close();
            });
        });

Шаблон:

<div ng-init="toggleRestsMap = true" class="search-object">
                    <a ng-click="toggleRestsMap = false" href="#showonmap" class="looking">
                        <span>{{::rest.lc.sh.t_show_on_map}}</span>
                    </a>
                    <a ng-click="toggleRestsMap = true" href="#showonmap" class="looking">
                        <span>СПИСОК</span>
                    </a>
                    <div class="search-content">
                        <form action="">
                            <input ng-model="searchRest" type="text" placeholder="{{::rest.lc.sh.t_search_rest}}">
                        </form>
                    </div>
                </div>
                <div ng-if="!toggleRestsMap" class="book-hotel">
                    <div class="row">
                        <map rests="rest.restsOnMap" styles="'map-rests'"></map>
                    </div>
                </div>
                <div ng-if="toggleRestsMap" class="book-hotel">
                    <div class="row">
                        <div ng-repeat="restaurant in rest.backRestaurants | filter:searchRest | startFrom:rest.pagination.currentPage*rest.pagination.pageSize | limitTo:rest.pagination.pageSize"
                             class="col-md-6 col-lg-4 col-sm-6">
                            <rest restaurant="restaurant"></rest>
                        </div>
                    </div>
                </div>
Answer 1

Проблема решена при помощи такого способа: при каждом показе карты я вызываю

setTimeout(function () {
                    google.maps.event.trigger(map, 'resize');
                }, 200);

Без setTimeout проблема остается.

READ ALSO
Почему не работает переменная js?

Почему не работает переменная js?

у меня есть переменная var a которую нужно передать в datepicker datesDisabled: a

662
Как отцентровать карту yandex по нескольким адресам

Как отцентровать карту yandex по нескольким адресам

Есть массив с адресамиКак расставить точки на Yandex карте и отцентровать по ним? Казалось бы стандартная реализация, но ничего толкового найти...

864
WP add_image_size привязка к разным постам

WP add_image_size привязка к разным постам

Есть необходимость в WP в разных постах использовать картинки разного размерав function

570
Можно ли как-то пометить поле input?

Можно ли как-то пометить поле input?

ЗдравствуйтеУ меня в форме на JavaScript есть динамическое добавление поля input в форму

525