Изменение размера с mat-side-nav и gridster2

Когда я переключаю Side-Nav, я жду ответа и затем вызываю gridster.resize():

 sideNavToggle() {
    this.sideNav.toggle().then(() => {
      this.gridster.resize();
    });
  }

Вот полный пример блиц-стека.

Убедитесь, что окно приложения достаточно широкое, чтобы гридстер отображал макет рабочего стола - или лучше Откройте приложение в новом окне.

Вот один пример:
Когда я запускаю приложение, ширина моего элемента гридстера составляет ~ 223, и он отображается, как и ожидалось.

Когда я теперь переключаю боковую навигацию, размер элемента гридстера корректно изменяется:

  • когда я использую инструменты разработки, я вижу, что новая ширина плитки равна 252
  • также журнал консоли обратного вызова изменения размера гридстера показывает, что ширина 252
  • Но ширина в компоненте неверна: она все равно 223 (см. Текст на плитке):

itemComponent.width 252

Когда я снова переключаю боковую навигацию, чтобы открыть ее, происходит то же самое:

  • плитка вернулась к 223
  • но текст в плитке по-прежнему показывает ширину 252
  • кажется, что ширина моей плитки всегда отстает

Ты хоть представляешь, чего мне не хватает?

Кстати, в моем реальном приложении плитка содержит компонент диаграммы, размер которого будет автоматически изменяться в зависимости от родительского элемента div (который находится в плитке). Поэтому важно, чтобы dom-width/height в плитке были правильными, когда произошло событие изменения размера.

Примечания:

  • это также происходит с последним выпуском 8.x agnular, angular-gridster2 и angular-material: пример stackblitz

1 ответ

Решение

Хороший способ справиться с этим - использовать библиотеку https://github.com/vdolek/angular-resize-event.
Тогда нам даже не нужно событие gridster itemResizeCallback

Просто прикрепите директиву изменения размера к вашему контейнеру: например,

<p  (resized)="onResized($event)">..</p>

и в обратном вызове измените размер диаграммы, холста и т. д.

  onResized(event: ResizedEvent) {
    // resize your chart, canvas
    // maybe use event.newWidth / event.newHeight when required
  }

Вот обновленный пример stackblitz, который использует resize-sensor

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