Angular-UI-Router解决OR位置变化?

时间:2015-05-15 18:36:05

标签: angularjs angular-ui-router

是否可以使用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);
    });

我宁愿在解决方案中同时执行这些操作...加载对象,但如果没有返回任何对象(或错误),则重定向到不同的状态。

1 个答案:

答案 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;
}