【发布时间】:2018-03-08 01:48:22
【问题描述】:
在我的 Angular 4 应用程序中,我有一些带有表单的组件,如下所示:
export class MyComponent implements OnInit, FormComponent {
form: FormGroup;
ngOnInit() {
this.form = new FormGroup({...});
}
他们使用 Guard 服务来防止未提交的更改丢失,因此如果用户在请求确认之前尝试更改路由:
import { CanDeactivate } from '@angular/router';
import { FormGroup } from '@angular/forms';
export interface FormComponent {
form: FormGroup;
}
export class UnsavedChangesGuardService implements CanDeactivate<FormComponent> {
canDeactivate(component: FormComponent) {
if (component.form.dirty) {
return confirm(
'The form has not been submitted yet, do you really want to leave page?'
);
}
return true;
}
}
这是使用一个简单的confirm(...) 对话框,它工作得很好。
但是我想用更花哨的模式对话框替换这个简单的对话框,例如使用ngx-bootstrap Modal。
如何使用模态来实现相同的结果?
【问题讨论】:
-
我使用了几种不同的模式并且总是发现最好的方法是使用带有组件的服务。很简单的东西。你不清楚哪一部分?
-
关于
canDeactivate根据用户的输入返回一个值 -
所以canDeactivate的返回类型需要是Observable
|Promise |boolean。所以,我会寻找一个结果返回其中一个的模式。看看这个...github.com/dougludlow/ng2-bs3-modal -
@jbrown 模态需要 jQuery,我会避免包含...
标签: angular typescript ngx-bootstrap confirm-dialog angular-guards