与刷新一起转到父级

时间:2015-02-20 16:52:06

标签: angularjs angular-ui state angular-ui-router

当处于子状态时,如何通过刷新该父状态转换回其父状态?

我的州是:

.state('user.things', {
    url: '/things',
    views: {
        "content@user": { 
            templateUrl: "partials/user/things/index.html",
            controller: 'thingIndexController' 
        }
    }
})
.state('user.things.show', {
    url: '/{id}',
    views: {
        "current-thing": { 
            templateUrl: "partials/user/things/show.html",
            controller: 'thingShowController' 
        }
    }
})

我尝试了以下操作,但在状态转换后'user.things'运行的任何代码都没有成功。 url确实发生了变化,我似乎确实处于该状态,但控制器中没有代码运行。

$scope.deleteThing = function () {
    thingService.delete($stateParams.id).then(function () {
        $state.go('user.things', {}, { reload: true});
        // $state.to('user.things', {}, { reload: true});
    });
};

1 个答案:

答案 0 :(得分:0)

你正在做得好。你的方法有a working plunker

所有内容与您的用例相同:

.controller('thingShowController', ['$scope', '$state', 'thingService',
    function ($scope, $state, thingService) { 
      $scope.deleteThing = function () {
        thingService.remove($scope.$stateParams.id).then(function () {
            $state.go('user.things', {}, { reload: true});
            // $state.to('user.things', {}, { reload: true});
        });
    };
}])
  

注意:唯一的变化(但不是必要的)是我用{strong> delete 替换了remove。它不是必需的,但删除是一个关键字,使用它并不是那么聪明......

因此,此示例应该可以帮助您观察工作解决方案并找到您自己代码中的差异。

检查working example here

一些提示:也许真正的问题在于您的服务thingService及其.delete()函数 - 返回承诺。可能是,这会返回错误......

这可能意味着,上面定义的.then()不会被解雇...检查承诺错误处理 Angular js - $q

promise.then(function(greeting) {
  alert('Success: ' + greeting);
}, function(reason) {
  alert('Failed: ' + reason);
});