Карта буклета не покрывает всю область карты

Обновлять: Я написал свой ответ. Пожалуйста, посмотрите это.

Оригинальный вопрос:

Можете ли вы сказать мне, почему листовка карта не отображается на всей области карты?

.html

<ion-content padding>
  <div style = "height: 100%;width:100%" leaflet [leafletOptions] = "options" *ngIf = "options" [leafletCenter] = "center">
  </div>
</ion-content>

.тс

  init(): void {
    this.options = {
      layers: [
        tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 18, attribution: "..." })
      ],
      zoom: 10,
      center: this.center = latLng(Number(this.activatedRoute.snapshot.paramMap.get("latitude")), Number(this.activatedRoute.snapshot.paramMap.get("longitude"))),
      attributionControl: false,
    };
  }

интерфейс

Карта буклета не покрывает всю область карты

Пожалуйста, смотрите изображение. Кажется, проблема с transform. По умолчанию это было 0,0,0. Я изменил его вручную в браузере вот так. Итак, как я могу установить его на карту?

Карта буклета не покрывает всю область карты

Скорее всего stackoverflow.com/questions/36246815/…

ghybs 10.04.2019 18:49

@ghybs Пожалуйста, посмотрите мое обновление и дайте мне совет.

Sampath 10.04.2019 18:57

Возможный дубликат Вкладка переключения данных не загружает карту Leaflet

IvanSanchez 10.04.2019 23:57

@IvanSanchez Это не сработало. Это работает для меня: stackoverflow.com/a/55622789/1077309

Sampath 11.04.2019 01:50
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
4
1 707
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

По моему мнению, листовка заполнена на 100% в своем родительском пространстве, можете ли вы использовать инструмент проверки браузера, чтобы увидеть, какова ширина и высота родителей. Вы также можете попробовать использовать

положение: абсолютное; слева: 0;

игнорировать ширину родителей

Попробуйте удалить отступ и изменить высоту на 100vh.

Попробуй это:

<ion-content>
  <div style = "height: 100vh; width:100%" leaflet [leafletOptions] = "options" *ngIf = "options" [leafletCenter] = "center">
  </div>
</ion-content>

Если вы хотите установить преобразование, сделайте это так:

<ion-content padding>
  <div style = "height: 100%; width:100%; transform: translate3D(250px, 200px, 100px)" leaflet [leafletOptions] = "options" *ngIf = "options" [leafletCenter] = "center">
  </div>
</ion-content>

У меня была такая же проблема в проекте ionic 4. Как было предложено в комментарии к связь, мне нужно было использовать map.invalidateSize() при рендеринге карты, а также при добавлении/удалении маркеров или любых других действиях в этом отношении. Это не помогло полностью. После этого мне также пришлось вручную запускать обнаружение изменений. Вот пример из нашего кода:

this.map.setView([this.myLocation.latitude, this.myLocation.longitude], 13);
this.map.invalidateSize();
this.ref.detectChanges();

где ref относится к ChangeDetectorRef.

Также убедитесь, что в ваш файл angular.json импортирован css листовки:

"styles": [
  // ....
  "./node_modules/leaflet/dist/leaflet.css"
]
Ответ принят как подходящий

Здесь я использую это с приложением Ionic 4. Я пробовал много решений, предоставленных разными разработчиками. Но ни один из них не работал для меня. Проблема здесь в событии life cycle, которое я использовал ранее. Так что теперь я использую ionViewDidEnter() и никаких проблем.

ionViewDidEnter() {
    this.center = latLng(Number(this.activatedRoute.snapshot.paramMap.get("latitude")), Number(this.activatedRoute.snapshot.paramMap.get("longitude")));
    this.options = {
      layers: [
        tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 18, attribution: "..." })
      ],
      zoom: 17,
      center: this.center,
      attributionControl: false,
    };

    this.layers.push(this.mapService.getMarker(this.center, "assets/icon/map/placeholder.png"));

  }

Точнее, здесь вы откладываете инициализацию карты, назначая позже члена options, который управляет *ngIf контейнера карты с его директивой leaflet в вашем шаблоне. Если вместо этого вы аннулируете размер карты в этом хуке жизненного цикла, результат должен быть таким же.

ghybs 11.04.2019 03:22

@ghybs Я сделал это. Но это не сработало для меня. Может быть, я сделал это неправильно.

Sampath 11.04.2019 12:06

У меня была та же проблема, даже с импортом leaflet.css и трюком «invalidateSize()».

Это потому, что я написал в «myComponent.page.html»:

<ion-content>
  <div id = "map" style = "height:400px; width: 100%;"></div>
</ion-content>

Кажется, Ionic4 css конфликтует с листовкой. Вам нужно получить <div>снаружи<ion-content>.

Правильно просто:

<div id = "map" style = "height:400px; width: 100%;"></div>

Надеюсь, это поможет кому-то

карта.invalidateSize() запускается после события изменения размера окна.

Итак, после изменения высоты просто напишите код:

 window.dispatchEvent(new Event('resize'));
 this.map.invalidateSize();

В моем случае это работает как шарм. Не забудьте заменить карта на переменную вашей карты. Мое это помогает кому-то

Другие вопросы по теме