Angular use modal dialog in canDeactivate Guard service for unsubmitted changes (Form dirty)

前端 未结 7 2520
北荒
北荒 2020-12-05 19:35

In my Angular 4 application I have some components with a form, like this:

export class MyComponent implements OnInit, FormComponent {

  form: FormGroup;

          


        
7条回答
  •  無奈伤痛
    2020-12-05 19:52

    You can pass a value to the afterClosed Observable of the dialog:

    // modal.component.html
    
      
      
    
    
    // unsaved-changes.service.ts
    @Injectable({ providedIn: 'root' })
    export class UnsavedChangesGuardService
      implements CanDeactivate {
      constructor(private _dialog: MatDialog) {}
    
      canDeactivate(component: FormComponent) {
        if (component.form.dirty) {
          const dialogRef = this._dialog.open(UnsavedChangesDialogComponent);
          return dialogRef.afterClosed();
        }
    
        return true;
      }
    }
    

提交回复
热议问题