我想取消使用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;
}
然後基於上述條件下,$過渡會帶領地點或將取消。問題是,即使上面的代碼的承諾被拒絕,狀態仍然會改變到最初請求的狀態。在這種情況下,我怎樣才能「取消」狀態變化?