我有以下代码用于返回按钮:
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函数,我该怎么办?
由于
答案 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(){});
}
}
})