Как загрузить карту Google в Materialise Modal?

Я использую materializecss, и проблема в том, что карта Google не загружается в модальном режиме материализации. Но кроме модального, он работает нормально. Я сделал все, что я должен сделать. Любое решение этой проблемы?

Обновление:

Я нашел решение для моей проблемы. На самом деле я использовал множественное представление в этом модальном окне и поместил свой div карты позади одного div, используя ng-show. Из-за этого моя карта не отображается. Но размещение карты div перед всеми остальными div решило мою проблему. :)


person nasr18    schedule 29.02.2016    source источник


Ответы (1)


Когда появляется модальное окно, оно изменяет размер своего содержимого, чтобы оно соответствовало ему. Таким образом, размер вашего компонента карты Google изменился, и в результате его просто нужно обновить.

Просто добавьте следующий код в свой тег <script>.

$('.modal-trigger').leanModal({
    ready: function() {
        var map = document.getElementById("googleMap");
        google.maps.event.trigger(map, 'resize');
    }
});

Это должно сделать это :)

=== ИЗМЕНИТЬ ===

Я добавил образец того, что, как я думаю, может вам помочь. Этот образец инициализирует объект карты при загрузке страницы и использует тот же объект в модели.

    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

    <link href="css/materialize.css" type="text/css" rel="stylesheet" media="screen,projection" />
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

    <script src="js/jquery-2.2.0.js" type="text/javascript"></script>
    <script src="js/materialize.js" type="text/javascript"></script>
    <script src="http://maps.googleapis.com/maps/api/js"></script>

    <script>
        function initialize() {
            var mapProp = {
                center: new google.maps.LatLng(51.508742, -0.120850),
                zoom: 5,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
        }
        google.maps.event.addDomListener(window, 'load', initialize);

        $(document).ready(function () {
            $('.modal-trigger').leanModal({
                ready: function () {
                    var map = document.getElementById("googleMap");
                    google.maps.event.trigger(map, 'resize');
                }
            });
        });
    </script>

</head>
<body>
    <a href="#mapmodel" class="modal-trigger blue z-depth-1 waves-effect waves-light btn-floating">
        <i class="red material-icons">location_on</i>
    </a> 

    <div id="mapmodel" class="modal modal-fixed-footer">
        <div class="modal-content">
            <h4>Test</h4>
            <div id="googleMap" style="width:500px;height:380px;"></div>
        </div>
        <div class="modal-footer">
            <a href="#" class="red modal-action modal-close waves-effect waves-green btn-flat">Got it</a>
        </div>
    </div>
</body>
</html>
person Vijay Chavda    schedule 03.04.2016
comment
на самом деле я нашел решение. но проблема не полностью решена. когда я открываю модальное окно, и если на этой странице нет карты, это означает, что карта загружается в модальном режиме. но если на этой странице уже есть карта, это означает, что карта не загружается в модальном режиме. отображается только серый цвет фона с управлением масштабированием. как это исправить???? - person nasr18; 06.04.2016
comment
добавьте один div карты в раздел body, а затем откройте модальное окно и посмотрите. Карта не будет правильно отображаться в модальном режиме. Это моя проблема. - person nasr18; 07.04.2016
comment
ждем решения. Пожалуйста, помогите мне решить эту проблему. :( @Виджай - person nasr18; 08.04.2016
comment
Не могли бы вы прислать свой точный код, который вызывает проблему? Я попробовал, как вы сказали, и это работает в моем случае. - person Vijay Chavda; 08.04.2016
comment
Чувак, было бы неплохо, если бы ты прислал свой код, чтобы я мог его проверить. - person Vijay Chavda; 08.04.2016
comment
на самом деле я использую ng-view для привязки частичного просмотра. Так что, пожалуйста, пойми меня, чувак. просто добавьте div карты в раздел body, а также добавьте div карты в модальном режиме. Затем откройте модальное окно на этой странице. Вы не получите карту в модальном режиме. Но если вы откроете модальное окно на какой-либо другой странице, на которой эта страница не содержит средств карты, модальное окно покажет карту без каких-либо проблем. - person nasr18; 08.04.2016
comment
Ладно, поправьте меня, если я не ошибаюсь. То есть вы имеете в виду просто создать еще один экземпляр объекта карты и отобразить его в div карты внутри раздела body вместе с предыдущим div карты, который показывает внутреннюю модель? (всего два объекта карты, привязанные к двум разделам карты, обе карты на одной странице, одна в разделе тела, а другая в модели).. только это? - person Vijay Chavda; 08.04.2016
comment
Вот вам планкер. Надеюсь, это поможет вам :) - person Vijay Chavda; 08.04.2016
comment
идеальный чувак. Большое спасибо за ваше решение. Я постараюсь и дам вам знать, сработало ли это в моем проекте или нет. :) - person nasr18; 08.04.2016
comment
Я не знаю, куда поместить этот код в angularjs с разными контроллерами и передавать разные latlng для отображения мест на карте. Я новичок в веб-разработке. Пожалуйста, помогите мне решить эту проблему. - person nasr18; 08.04.2016
comment
Хорошо, убедитесь, что вы вызвали метод .leanModel() так, как я упоминал. Потому что, если вы не реализуете функцию «готово», я заметил, что карта вашей модели останется серого цвета без отображения карты. Поэтому перепроверьте, правильно ли вы реализовали метод leanModal(). И, пожалуйста, проголосуйте за ответ, если вы считаете, что мой ответ помог до сих пор :) - person Vijay Chavda; 08.04.2016
comment
Спасибо за голос. Итак, наконец, это сработало в вашем проекте? - person Vijay Chavda; 09.04.2016
comment
Нет. :( Я сделал все, чтобы заставить его работать, но все равно безуспешно. - person nasr18; 09.04.2016
comment
Что ж, в таком случае дважды проверьте свой вызов leanModel(); это все, с чем я могу вам помочь, без вашего кода... :) - person Vijay Chavda; 09.04.2016
comment
Я нашел решение для моей проблемы. На самом деле я использовал множественное представление в этом модальном окне и поместил свой div карты позади одного div, используя ng-show. Из-за этого моя карта не отображается. Но размещение карты div перед всеми остальными div решило мою проблему. :) - person nasr18; 11.04.2016
comment
большой! рад что нашел :) - person Vijay Chavda; 11.04.2016