是否可以使用UI-Router STATE通过promise检索对象?如果promise失败或者没有返回任何对象,则重定向到不同的路径?
我目前只查看缓存对象和布尔参数,并且只允许我的控制器在对象存在时进行渲染。不幸的是,这意味着在加载对象时可能会显示视图(不好)......
.state("accountSelect", { url: ACCT_SELECT_URL, templateUrl: "views/account-select.html",
resolve: {
hasAccounts: function (currentUser, $location) {
if (!currentUser.profile.hasAccounts) {
$location.path(ACCT_CREATE_URL);
}
}
}
})
然后是控制器......
accountManagementService.getAccounts()
.then(function (items) {
vm.accounts = items;
})
.catch(function (err) {
console.log('Exception in accountCtrl.getAccounts()');
console.log(err);
});
我宁愿在解决方案中同时执行这些操作...加载对象,但如果没有返回任何对象(或错误),则重定向到不同的状态。
答案 0 :(得分:0)
是否可以使用UI-Router STATE通过a检索对象 如果承诺失败或没有,则承诺但是重定向到不同的路径 对象被退回?
据我所知,从documentation可以看出,没有优雅的方法来处理失败的解决方案。我构建了一个plunkr来演示我找到的两种方法来解决这类问题。
我发现可以通过在运行时或在最方便的地方配置应用程序来处理它,方法是监听状态更改错误,如下所示:
$rootScope.$on('$stateChangeError', function(event){
$state.go('error');
});
或在服务中处理它:
function testService($state){
var service = {
getSomething: getSomething
};
function getSomething(){
try{
throw 'It broke!';
} catch(e) {
console.log(e);
$state.go('error');
}
}
return service;
}