2016-02-18 28 views
1

如果我写这样的:

$scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
    if ($scope.isChanged) { 
     myShowOkCancelDialog(NotifyType.Warn, 'do you want leave?', function (ok) { 
      if (ok) { 
       $state.go(toState, toParams); 
      } 
     }) 
     event.preventDefault(); 
    } 
}); 

将始终要求确定或取消,而我不希望使用$window.confirm

$scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
    if ($scope.isChanged) { 
     var isjump = confirm('do you want leave?'); 
     if (!isjump) { 
      event.preventDefault(); 
     } 
    } 
}); 
+0

无法验证,请提供一个小提琴或包含您所使用的特定服务plunker – beaver

回答

0

我想你想要的是重置$scope.isChanged如果用户想离开。然后当你调用$state.go()条件不会导致警告显示

$scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
    if ($scope.isChanged) { 
     myShowOkCancelDialog(NotifyType.Warn, 'do you want leave?', function (ok) { 
      if (ok) { 
       $scope.isChanged = false; 
       // $stateChangeStart will not enter `if` now 
       $state.go(toState, toParams); 
      } 
     }) 
     event.preventDefault(); 
    } 
});