Angular CDK OverlayModule, cdk-overlay-pane не устанавливает абсолютное положение?

Я использую Overlay Module из Angular's CDK. И я просто не могу найти способ добавить position: absolute к наложению? Модуль получит top и left позицию, которая соответствует положению подключенного элемента, но оверлей не получит position: absolute. Я не могу добавить абсолютную позицию из-за ViewEncapsulation. и я действительно изо всех сил пытаюсь найти решение.

Вопрос: Как использовать cdkOverlayOrigin и cdkConnectedOverlayOrigin

Модуль:

import { OverlayModule } from '@angular/cdk/overlay';



@NgModule({
  imports: [
    OverlayModule,
  ],
  declarations: [ MenuComponent ],
})
export class MenuModule {
}

Составная часть:

@Component({
  selector: 'app-menu',
  templateUrl: './menu.component.html',
  styleUrls: [ './menu.component.scss' ],
})
export class MenuComponent {
}

Шаблон:

 <div style="margin: 0 auto; width: 30%">
  <h1 cdkOverlayOrigin
      #checkListTrigger="cdkOverlayOrigin"
      (click)="checkListOpen = !checkListOpen"
      style="background: blue">Overlay Origin</h1>
  <ng-template
    cdkConnectedOverlay
    [cdkConnectedOverlayOrigin]="checkListTrigger"
    [cdkConnectedOverlayOpen]="checkListOpen">

    <ng-container>
      <p>Why you no positioned on h1 element</p>
    </ng-container>

  </ng-template>
</div>

Посмотрите, как это не по центру  введите описание изображения здесь

Если я добавлю position: absolute, теперь он работает как задумано? введите описание изображения здесь


person Armeen Harwood    schedule 16.12.2017    source источник
comment
Есть ли причина, по которой вы используете OverlayModule вместо Angular - Material mat-dialog? material.angular.io/components/dialog/overview (это стандарт для usking cdk элементов в Angular)   -  person Z. Bagley    schedule 16.12.2017
comment
Потому что я пытаюсь сделать всплывающее окно / всплывающую подсказку, а не диалоговое окно.   -  person Armeen Harwood    schedule 16.12.2017
comment
Диалог должен быть стандартом для всего браузера для всего, что требует больше, чем диапазон для рендеринга в DOM. Если вам нужен только текст, то Material предоставляет tooltip. Вы можете расположить диалог на элементе в представлении с настройкой, и вы можете манипулировать им многими другими способами (хотя по умолчанию это довольно стандартные)   -  person Z. Bagley    schedule 16.12.2017
comment
Это тоже не всплывающая подсказка. joejordanbrown.github.io/material2-popover-demo/popover - это нечто большее что я ищу.   -  person Armeen Harwood    schedule 16.12.2017


Ответы (2)


Это описано в документации API. Вы можете указать класс панели для области наложения.

Вот код:

const overlay = overlay.create({
    panelClass: 'pos-absolute'
});
.pos-absolute {
    position: absolute;
}
person Edric    schedule 18.12.2017
comment
Привет, Эдрик, у меня есть тот же пример, Мэтью, но я не могу понять, как назначить оверлей тому же коду? Я создал репозиторий git github.com/frontruk/overaly-module/blob/master/src/app/modules/, если бы вы могли помочь, это было бы здорово - person Chris Tarasovs; 14.04.2018

Абсолютное позиционирование сгенерированного контейнера оверлея определяется в классе .cdk-overlay-pane, который является частью темы материала angular. Возможно, вы забыли включить тему?

Если это так, добавьте следующую строку в свой файл style.css (при условии, что вы используете проект Angular CLI). @import "~@angular/material/prebuilt-themes/indigo-pink.css";

person cmonsqpr    schedule 12.01.2018