转到父

时间:2017-07-19 09:48:45

标签: angular-ui-router

我有以下代码用于返回按钮:

function goBack() {
        var id = $scope.$parent.information && $scope.$parent.information .id;

        // you can either come back to the one of two possible states
        $state.go($state.$current.parent.name, { id: id || $ctrl.groupId }, {reload:true});
    }

当我运行此代码时,不会调用为父状态定义的resolve方法,也不会进行网络调用。

我检查的状态按以下方式定义:

.state('home.groups.history.details', {
            url: '/:id',
            controller: 'firstController',
            templateUrl: '...',
            resolve: {
                detailsModel: function (detailsService, $stateParams) {
                    return detailsService.getGroupDetails($stateParams.id, true)
                        .then(function (result) {
                            return result.data;
                        });
                        // .catch(function(){});
                }
            }                
        })
        .state('home.groups.history.details.specific', {
            url: '/:specificId',
            controller: 'secondController',
            templateUrl: '...',
            resolve: {
                specificDetailsModel: function ($stateParams, detailsService) {
                    return detailsService.getSpecific($stateParams.specificId)
                        .then(function (result) {
                            return result.data;
                        });
                        // .catch(function(){});
                }
            }
        })

为了让goBack方法在回到父状态时调用resolve函数,我该怎么办?

由于

1 个答案:

答案 0 :(得分:1)

解决方案基于此处提供的答案:ui-router does not run a parent state's resolve promise when using $state.go()

为了在所有状态参数相同时重新加载父项,就是创建一个新的状态参数,并确保每个状态参数都返回。我的解决方案:

function goBack() {
    var id = $scope.$parent.information && $scope.$parent.information .id;

    // you can either come back to the one of two possible states
    $state.go($state.$current.parent.name, { id: id || $ctrl.groupId, timeSpan: Date.now() });
}

因此,每次调用它时,时间跨度都会不同。另外,将timeSpan添加到父状态参数:

.state('home.groups.history.details', {
        url: '/:id',
        controller: 'firstController',
        params: {timeSpan: undefined},
        templateUrl: '...',
        resolve: {
            detailsModel: function (detailsService, $stateParams) {
                return detailsService.getGroupDetails($stateParams.id, true)
                    .then(function (result) {
                        return result.data;
                    });
                    // .catch(function(){});
            }
        }                
    })