Большое всплывающее окно материала Angular должно сделать родительский контент прокручиваемым.

У меня есть всплывающее окно в моем проекте с некоторыми флажками, перечисленными ниже других.

Прямо сейчас все работает нормально, но когда разрешение экрана маленькое, содержимое обрезается внизу, а родительский контейнер не прокручивается, это происходит только с CdkOverlay, поскольку он, похоже, не влияет на родительский контент, когда отображается всплывающее окно, вы можете увидеть рабочий пример на этом stackblitz

Я не могу поделиться своим основным кодом, но это то, что я пробовал на stackblitz, и это очень похоже на мой проект:

 <div
  cdkScrollable
  style = "height: 100px; overflow-y: auto; border: 1px solid green">
  <button
    (click) = "isOpen = !isOpen"
    cdkOverlayOrigin
    #trigger = "cdkOverlayOrigin">Show</button>
  <ng-template
    cdkConnectedOverlay
    [cdkConnectedOverlayOrigin] = "trigger"
    [cdkConnectedOverlayOpen] = "isOpen">
    Popover content 
  </ng-template>
</div>

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

Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Как я могу создать библиотеку angular и опубликовать ее или использовать локально
Как я могу создать библиотеку angular и опубликовать ее или использовать локально
Angular - это мощный фреймворк для создания веб-приложений. Одной из его ключевых особенностей является возможность создания и использования библиотек...
Promise v/s Observable в Angular
Promise v/s Observable в Angular
В системах Push производитель определяет, когда отправить данные потребителю. Потребитель не знает, когда он получит эти данные.
Angular: Публикация частной библиотеки Angular для совместного использования компонентов с помощью Verdaccio
Angular: Публикация частной библиотеки Angular для совместного использования компонентов с помощью Verdaccio
Совместное использование компонентов с помощью частной библиотеки в Angular
Angular Router - учебник для начинающих
Angular Router - учебник для начинающих
Angular Router - это мощный и гибкий инструмент для создания одностраничных приложений (SPA) с навигацией. Он позволяет легко управлять навигацией...
2
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

CDK-оверлей прикреплен вне приложения

Если единственное, что вам нужно, это изменить «родителя», вы можете сделать это в событии (прикрепить)

<!--see the template reference variable "anchor" 
    and the style = "position:relative"-->
<div #anchor
    style = "position:relative;
    height: 100px; 
    overflow-y: auto; 
    border: 1px solid green ">
  <button (click) = "isOpen = !isOpen" cdkOverlayOrigin #trigger = "cdkOverlayOrigin">
    Show
  </button>

  <!--in attach event you pass the "anchor"-->
  <ng-template #template
    cdkConnectedOverlay
    (attach) = "changeParent(anchor)"
    ...
  >
   ...
  </ng-template>

ChangeParent это просто:

  //in constructor inject the Overlay service
  constructor(private overlay: Overlay) { }

  changeParent(el:any)
  {
    //get the "cdk-panel
    const container=(this.overlay as any)
                        ._overlayContainer.getContainerElement()

    //it's necessary change the position to "absolute"
    container.style.position='absolute'

    //and take account the position of the div
    const rect=el.getBoundingClientRect()
    container.style['margin-top']=-rect.top+'px'
    container.style['margin-left']=-rect.left+'px'


    //change the parent using appendChild
    el.appendChild(container);
  }

Стекблиц

Да! это именно то, что мне было нужно, хотя для этого требуется указать относительную позицию родительского компонента, это не имеет большого значения, спасибо.

DJG22 18.01.2023 21:40

@DJG22 DJG22, боюсь, нужно немного подкорректировать. Если div находится в "верху" работает, а если нет, то нужно настроить положение. Я работаю над этим и обновляю свой ответ, когда получаю его

Eliseo 18.01.2023 22:20

@ DJG22, просто сделай это :). ПРИМЕЧАНИЕ. Вы можете использовать el.style.position = "relative", если вы не пишете в .html или не используете .css.

Eliseo 18.01.2023 22:29

Он отлично работает с исходным решением, исходный HTML не похож на stackblitz, это был просто образец, так как я не могу поделиться исходным кодом.

DJG22 19.01.2023 21:10

@ DJG22 DJG22, в stackblitz я обновил его, добавив «position.relative» и приняв во внимание позицию. Мои комментарии об этом.

Eliseo 20.01.2023 08:01

Извините за награду, я только что присудил вам очки, спасибо за это, вы мне очень помогли!

DJG22 25.01.2023 22:57

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