2017-01-17 68 views
1

我想取消使用ui路由器在某些条件下的$转换更改。

在我来看块,我有以下代码:

$transitions.onStart({ from: 'createCatalog.previewStyles'}, function(trans) { 
     var from = trans.from(), 
      to = trans.to(); 
     previewStylesService.checkSave() 
     .then(function success() { 
      return $state.target(to); 
     }, function err() { 
      return $state.target(from); 
     }); 
    }); 

我previewStylesService checkSave功能如下:

function checkSave() { 
     var deferred = $q.defer() 
     if (dataChanged) { 
      if (confirm('Would you like to save the changes made to the catalog?')) { 
       catalogService.prepCatalogSave() 
        .then(function success() { 
         deferred.resolve(); 
        }, function err() { 
         deferred.reject(); 
        }) 
      } else { 
       deferred.resolve(); 
      } 
     } else { 
      deferred.reject(); 
     } 
     return deferred.promise; 
    } 

然后基于上述条件下,$过渡会带领地点或将取消。问题是,即使上面的代码的承诺被拒绝,状态仍然会改变到最初请求的状态。在这种情况下,我怎样才能“取消”状态变化?

回答

1

我知道它可能会迟到,但它可以帮助别人。 我刚刚遇到了同样的问题,经过几个小时的研究/文档阅读后,我得出结论:$ transitions.onBlaBla回调函数具有可能是真实的返回值(转换恢复正常),false(转换是取消),或许诺(transitionService将等待这一承诺拒绝/解决,以决定是否需要做过渡或不

你可以尝试返回

return previewStylesService.checkSave() 

,看看会发生什么,或尝试用一个返回true/false和其他一些代码挂钩来做不同的事情

这里是回报你的onSuccess回调挂钩结果的链接: https://ui-router.github.io/ng1/docs/latest/modules/transition.html#hookresult