【发布时间】:2018-09-23 00:47:45
【问题描述】:
我的 Angular4 页面中有两个选项卡 (PrimeNg Tabview),其中包含许多输入字段,例如 textboxes、textareas、dropdowns 等。我还有一个侧面菜单栏可以导航到应用程序中的其他页面。我想如果这些输入字段中的数据有任何更改,那么如果用户尝试更改选项卡或使用侧面导航到其他页面,将会弹出消息(模式或确认框)菜单栏。
我已经尝试过ngOnDestroy() 方法。虽然此方法仅在页面关闭时触发(通过导航到其他页面或移动到下一个标签页),但它不允许您从方法中显示模式/确认框,因为它处于销毁生命周期挂钩.
请帮助我确定实际事件,如果页面/表单中的任何输入字段发生更改,我可以使用确认框提示用户。
@surjit 建议:
my-guard.service.ts:
export interface CanComponentDeactivate {
CanDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable()
export class CreateRequestGuardService implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate) {
let vDeactivate = component.CanDeactivate ? component.CanDeactivate() : true;
return vDeactivate;
}
}
在 my-component.ts 内:
import { CreateRequestGuardService } from './my-guard.service';
canDeactivate(): Observable<boolean> | boolean {
console.log('I am moving away!');
if (!this.isSaved) {
const confirmation = window.confirm('Are you sure?');
return Observable.of(confirmation);
}
else{
return true;
}
}
在 my-router.ts:
import { CreateRequestGuardService } from './my-guard.service';
const allRoutes: Routes = [
{ path: 'save', component: my-component, canDeactivate: [MyGuardService]},
{ path ....},
..
]
【问题讨论】:
标签: angular typescript primeng