在用户离开当前状态之前,我想提示他们保存他们的工作。我在$stateChangeStart
上有一个监听器,但问题是,在用户确认他们希望离开当前状态后,他们再次得到提示并且不能离开,因为监听器一直在拦截状态变化。我尝试传递一个布尔参数,所以我可以检查他们是否确认了他们离开的意图,但它没有通过。
$scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {
console.log('toState: ');
console.log(toState);
console.log('toParams: ');
console.log(toParams);
console.log('fromState: ');
console.log(fromState);
console.log('fromParams: ');
console.log(fromParams);
console.log('options: ');
console.log(options);
//if (!isExitConfirmed) {
event.preventDefault();
ModalFactory.OpenTwoActionModal('EventFooterTwoActionModal',
'Exit Event', 'Are you sure you want to exit? Any unsaved changes will be lost.',
'Exit', function() { $state.go(toState, { isExitConfirmed: true }); },
'Cancel', function() {});
//}
});
我已登录到控制台toState
,toParams
,fromState
,fromParams
和options
,但其中没有一个包含isExitConfirmed
。
我在这里错过了什么,或者我是以错误的方式解决这个问题?
答案 0 :(得分:0)
我建议你在状态提供程序配置中使用resolve而不是监听事件。事件处理程序总是不好用,因为它会导致内存泄漏。
在调用stage.go()之前,调用弹出窗口来保存数据。一旦用户确认,保存标志。访问该标志以解决状态提供程序配置中的下一个路由更改。
答案 1 :(得分:0)
使用$ q服务中的延迟对象以及相关的承诺。 承诺只能消费一次,可以解决或拒绝承诺。