angular 2:防止用户在模态对话框外点击
angular 2: prevent user to click outside the modal dialog
我想防止用户在模态对话框外点击,他只能按下按钮退出对话框。我该怎么做?
dialog.component.ts
ngOnInit() {
const dialogRef = this.dialog.open(DialogResultComponent);
dialogRef.afterClosed().subscribe(result => {
console.log(result);
});
}
对话框-result.component.ts
import { Component, OnInit } from '@angular/core';
import { MdDialog, MdDialogRef } from '@angular/material';
import { FormGroup,FormControl,Validators,FormBuilder, } from '@angular/forms';
@Component({
selector: 'app-dialog-result',
templateUrl: './dialog-result.component.html',
})
export class DialogResultComponent {
form: FormGroup;
name = new FormControl('',Validators.required);
width = new FormControl('',Validators.required);
height = new FormControl('',Validators.required);
constructor(public dialogRef: MdDialogRef<DialogResultComponent>,private fb: FormBuilder) {
}
ngOnInit() {
this.form = this.fb.group({
'name' :this.name,
'width': this.width,
'height': this.height,
});
}
saveData(){
console.log(this.name.value);
this.dialogRef.close({name:this.name.value,width:this.width.value,height:this.height.value});
}
}
我尝试做的是:
对话框-result.component.html
<div>
<form [formGroup]="form">
<h3>MineSweeperwix</h3>
<div class="mdl-dialog__content">
<p><mdl-textfield type="text" label="name" ([ngModel])="name" floating-label autofocus></mdl-textfield></p>
<mdl-textfield type="number" formControlName="width" label="width" floating-label autofocus></mdl-textfield>
<mdl-textfield type="number" formControlName="height" label="height" floating-label autofocus error-msg="'Please provide a correct email!'"></mdl-textfield>
</div>
<div class="mdl-dialog__actions">
<button mdl-button (click)="saveData()" mdl-button-type="raised" mdl-colored="primary" mdl-ripple [disabled]="!form.valid">Save</button>
<button mdl-button (click)="dialogRef.close(dd)" mdl-button-type="raised" mdl-ripple>Cancel</button>
</div>
</form>
</div>
对话框-result.component.cs
div.modal-backdrop {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100; /* less than your dialog but greater than the rest of your app */
/* optional: */
background: black;
opacity: 0.2;
}
您正在使用 Material 设计对话框,其中有一个选项可以添加背景并防止关闭。
我认为你需要做这样的事情:
this.dialogRef = this.dialog.open(DialogResultComponent, {
disableClose: true,
hasBackdrop: true // or false, depending on what you want
});
在 https://github.com/angular/material2/blob/master/src/demo-app/dialog/dialog-demo.ts 查看演示。
由于文档尚未准备好,我发现查看源代码中包含的演示应用程序非常有用。您可以 运行 在本地使用:
npm run demo-app
也像迈克说的那样添加一个演示,
openDialog() {
let dialogRef = this.dialog.open(DialogResultExampleDialog,{disableClose:true});
dialogRef.afterClosed().subscribe(result => {
this.selectedOption = result;
});
}
例如,您可以在 shared.module 的提供程序中设置参数 disableClose:true
。那么,你所有的 mat-dialog 都会受到这个参数的影响:
providers: [{
provide:
MAT_DIALOG_DEFAULT_OPTIONS,
useValue: {
disableClose: true,
hasBackdrop: true
}
}
]
我想防止用户在模态对话框外点击,他只能按下按钮退出对话框。我该怎么做?
dialog.component.ts
ngOnInit() {
const dialogRef = this.dialog.open(DialogResultComponent);
dialogRef.afterClosed().subscribe(result => {
console.log(result);
});
}
对话框-result.component.ts
import { Component, OnInit } from '@angular/core';
import { MdDialog, MdDialogRef } from '@angular/material';
import { FormGroup,FormControl,Validators,FormBuilder, } from '@angular/forms';
@Component({
selector: 'app-dialog-result',
templateUrl: './dialog-result.component.html',
})
export class DialogResultComponent {
form: FormGroup;
name = new FormControl('',Validators.required);
width = new FormControl('',Validators.required);
height = new FormControl('',Validators.required);
constructor(public dialogRef: MdDialogRef<DialogResultComponent>,private fb: FormBuilder) {
}
ngOnInit() {
this.form = this.fb.group({
'name' :this.name,
'width': this.width,
'height': this.height,
});
}
saveData(){
console.log(this.name.value);
this.dialogRef.close({name:this.name.value,width:this.width.value,height:this.height.value});
}
}
我尝试做的是: 对话框-result.component.html
<div>
<form [formGroup]="form">
<h3>MineSweeperwix</h3>
<div class="mdl-dialog__content">
<p><mdl-textfield type="text" label="name" ([ngModel])="name" floating-label autofocus></mdl-textfield></p>
<mdl-textfield type="number" formControlName="width" label="width" floating-label autofocus></mdl-textfield>
<mdl-textfield type="number" formControlName="height" label="height" floating-label autofocus error-msg="'Please provide a correct email!'"></mdl-textfield>
</div>
<div class="mdl-dialog__actions">
<button mdl-button (click)="saveData()" mdl-button-type="raised" mdl-colored="primary" mdl-ripple [disabled]="!form.valid">Save</button>
<button mdl-button (click)="dialogRef.close(dd)" mdl-button-type="raised" mdl-ripple>Cancel</button>
</div>
</form>
</div>
对话框-result.component.cs
div.modal-backdrop {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100; /* less than your dialog but greater than the rest of your app */
/* optional: */
background: black;
opacity: 0.2;
}
您正在使用 Material 设计对话框,其中有一个选项可以添加背景并防止关闭。
我认为你需要做这样的事情:
this.dialogRef = this.dialog.open(DialogResultComponent, {
disableClose: true,
hasBackdrop: true // or false, depending on what you want
});
在 https://github.com/angular/material2/blob/master/src/demo-app/dialog/dialog-demo.ts 查看演示。
由于文档尚未准备好,我发现查看源代码中包含的演示应用程序非常有用。您可以 运行 在本地使用:
npm run demo-app
也像迈克说的那样添加一个演示,
openDialog() {
let dialogRef = this.dialog.open(DialogResultExampleDialog,{disableClose:true});
dialogRef.afterClosed().subscribe(result => {
this.selectedOption = result;
});
}
例如,您可以在 shared.module 的提供程序中设置参数 disableClose:true
。那么,你所有的 mat-dialog 都会受到这个参数的影响:
providers: [{
provide:
MAT_DIALOG_DEFAULT_OPTIONS,
useValue: {
disableClose: true,
hasBackdrop: true
}
}
]