Угловой материал sidenav с подменю не нажимает должным образом, когда полоса прокрутки видна

Я использую Angular Material sidenav, и в моем меню есть подменю. Когда я открываю подменю, появляется полоса прокрутки, делающая sidenav немного больше, и он покрывает часть основного контента.

Смотрите этот Stackblitz https://stackblitz.com/edit/angular-raedvz, раскройте подменю, и вы увидите поведение.

2 ответа

Решение

По умолчанию Angular Material изменяет размеры контейнера только в nav.open, window.resize или при изменении режима nav. Вы должны либо сами инициировать изменение размера контейнера, либо использовать встроенную опцию autosize, Но они советуют вам использовать его на свой страх и риск, потому что это может вызвать проблемы с производительностью.

<mat-sidenav-container class="example-container" *ngIf="shouldRun" autosize>Пример для вашего стекаблица: https://angular-wsvjf8.stackblitz.io/

Я проверил в вашем примере, и это работает для меня. Если у вас возникают проблемы с производительностью из-за того, что ваше приложение делает гораздо больше, чем просто пример (очевидно), вам, возможно, придется запустить изменение размера на вашем toggleMenu метод.

https://material.angular.io/components/sidenav/overview


Обновите свой комментарий:

Я не уверен, что это правильный путь или нет. Основываясь на том, что я могу найти в коде для autosize вариант. Они проверяют поля в каждом цикле обнаружения изменений, поэтому это может вызвать проблемы с производительностью при использовании autosize вариант. После этого они вызывают приватную функцию _updateContentMargins и исправьте поля контейнера.

Вы могли бы использовать ViewChild и получить доступ к MatSidenavContainer и вызвать эту функцию в вашем toggleMenu, Но так как _updateContentMargins Сама функция является частной, я бы ее не использовал. Лично я не могу придумать другой способ сделать это.

Вот рабочий пример вызова _updateContentMargins в вашем toggleMenu: https://stackblitz.com/edit/angular-segnwt

я использую setTimeout здесь _ngZone из MatSidenavContainer теперь также стал приватным.

Добавление autosize Атрибут должен исправить вашу проблему. Хотя это, похоже, влияет на производительность.

Посмотрите на эту проблему GitHub: https://github.com/angular/material2/issues/9601

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