2017-01-17 126 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