当$ ionicView.beforeLeave事件触发时,你能阻止离子中的视图发生变化吗?

时间:2015-10-13 14:29:18

标签: angularjs ionic-framework

我有一个带有表格的离子视图。当有人试图离开视图时(在我的情况下通过选择菜单项),$ionicView.beforeLeave事件会触发,我会在控制器中捕获它。到目前为止一切都很好。

$ionicView.beforeLeave事件处理程序中,我将检查表单中的数据并将其提交给服务器。如果数据不正确,我想告诉用户并阻止他们离开表单视图,这样他们就必须纠正错误。

我无法弄清楚如何停止更改视图,以便用户保持在表单视图中。

有办法做到这一点吗?如果是这样的话?

2 个答案:

答案 0 :(得分:1)

您可以通过将其添加到控制器中来完成它:

$scope.$on("$stateChangeStart", function(event){
  if($scope.shouldIStayOrShouldIGo=='stay') {
    event.preventDefault();
  }
});

确认弹出窗口的示例

var go=false;
$scope.$on("$stateChangeStart", function(event, toState){
  if(go===false) {
    event.preventDefault();

    $ionicPopup.confirm({
      title:'Are you sure you want to go?',
      cancelText:'No, stay',
      okText:'Yes, go'
    }).then(function(result) {
      if(result) {
        go=true;
        $state.go(toState);
      }
    });
  }
});

答案 1 :(得分:0)

$ionicView.beforeLeave应该是“可取消的”,但不起作用。

你可以这样做,可能:

$scope.$on('$ionicView.beforeLeave', function (event) {
 event.preventDefault();
});

但是有一个问题open,显然还没有解决。 你在这里唯一的选择是取消ui-ruote中的事件:

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {

});