mat-dialogをドラッグさせる
Angular Materialのダイアログをドラッグさせるようにしていきます。
以下を参考に、ダイアログのドラッグ機能を追加します。
https://material.angular.io/cdk/drag-drop/overview
また、DragDropModuleを使うのでインポートする必要があります。
import {DragDropModule} from '@angular/cdk/drag-drop';
ソースコード
HTML
mat-dialog-titleの部分にドラッグ機能を追加しています。
<h1 mat-dialog-title
cdkDrag
cdkDragRootElement=".cdk-overlay-pane"
cdkDragHandle
cdkDragBoundary=".cdk-overlay-container"
>
ヘッダータイトル
</h1>
<div mat-dialog-content>コンテンツ</div>
セレクター | 説明 |
---|---|
cdkDrag | ドラッグできる要素にする |
cdkDragRootElement | ドラッグさせるルート要素を指定。 .cdk-overlay-paneがダイアログの部分のクラスとして使われているので、ダイアログをドラッグできるようになる |
cdkDragHandle | この要素をドラッグできるハンドルとする。 |
cdkDragBoundary | ドラッグ可能範囲を指定。 .cdk-overlay-containerが、ダイアログの後ろの背景のクラスとして使われてるので、それを指定。 |
CSS
::ng-deep .dialog-style .mat-dialog-title {
background-color: greenyellow !important;
cursor: move;
}
::ng-deep .dialog-style .mat-dialog-container {
padding: 0px;
}
::ng-deep .dialog-style .mat-dialog-content {
margin: 0px;
padding: 0px 24px 24px 24px;
}
TypeScript
import { Component } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { DialogComponent } from './dialog/dialog.component';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
constructor(private dialog:MatDialog){}
openDialog(){
this.dialog.open(
DialogComponent, {
height: '200px',
width: '400px',
panelClass: 'dialog-style'
}
)
}
}
実行結果
以下の、ヘッダータイトルの緑色の部分でダイアログをドラッグできる
ドラッグ後