我想在用户导航离开我的应用程序中的某些页面之前警告用户并获得确认,例如撰写新的消息视图。我可以捕获哪些事件并取消/继续实现这一目标?
答案 0 :(得分:6)
您应该处理$ locationChangeStart事件以挂接到查看转换事件,因此请使用此代码来处理控制器中的转换验证:
$scope.$on('$locationChangeStart', function( event ) {
var answer = confirm("Are you sure you want to leave this page?")
if (!answer) {
event.preventDefault();
}
}
你也可以使用这个指令angularjs-unsaved-changes,它比每个控制器编写它更可重用。
答案 1 :(得分:6)
如果您说某个链接或按钮导航到其他路线或州,您只需显示确认导航的模式:
<a href="" ng-click="goToAnotherState()">Go Away...</a>
$scope.goToAnotherState = function(){
//show modal and get confirmating however your like
if(modalResponse.Ok){
$state.go('anotherState');
}
}
另一种选择是在ui-router的$locationChangeStart
事件中执行此操作,但如果您只在此处查看此内容,则第一种方法更好。 $locationChangeStart
方法:
$rootScope.$on('$locationChangeStart', function (event, next, prev) {
event.preventDefault();
//show modal
if(modalResponse.ok){
var destination = next.substr(next.indexOf('#') + 1, next.length).trim();
$location.path(destination)
}
}
答案 2 :(得分:0)
定义状态时,请使用onExit
回调which is a transition hook:
在状态上声明的onEnter / onExit被处理为标准的转换挂钩。挂钩的返回值可能会更改过渡。
.state('foo', {
//dont return a value else it the transition will wait on the result to resolve (Promise)
onEnter: (MyService) => { MyService.doThing(); },
//return false to cancel the transition; i.e. prevent user from leaving
onExit: (MyService) => { return MyService.isSatisfied(); }
});
https://ui-router.github.io/ng1/docs/latest/interfaces/ng1.ng1statedeclaration.html#onexit
答案 3 :(得分:-1)
我认为最好使用它:
$scope.$on('$stateChangeSuccess', function(event, toState) {
// check here
});
这个答案是不正确的。