我有这样的路线(使用ui-router):
$stateProvider
.state('studies', {
url: '/studies?all&field&term&page&sort&sort_dir',
templateUrl: 'scripts/studies/studies.template.html',
controller: 'StudiesController',
onExit: function exitStudies(filterQuery) {
filterQuery.emptyQuery();
},
menuElement: 'studies',
resolve: {
attributes: function (manageAttributes, attributeDefinition, $q) {
console.log('resolve');
var promises = {
columnDefinitions: attributeDefinition.fillColumnsDefinitions(),
userColumns: manageAttributes.queryAttributes()
}
return $q.all(promises)
.then(function (response) {
var attributes = _.map(response.userColumns, function (object) {
return _.find(manageAttributes.getAllAttributes(), function (attribute) {
return attribute.name === object.name;
});
});
manageAttributes.setAttributes(attributes);
});
}
}
});
['favorites-list', 'favorites-filter', 'default-filter'].forEach(function(directive) {
$stateProvider.state('studies.' + directive, {
template: '<' + directive + '></' + directive + '>'
});
});
当我使用以下方式导航到孩子时:
收藏夹
触发了解析控制台日志,我在子路由中没有url,因为我不希望在导航到子路由时更改url。
当我添加此代码时:
.run(function($rootScope, $state) {
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
console.log('state: ' + fromState.name + ' -> ' + toState.name);
});
});
我收到了这条消息:
resolve
state: -> studies
resolve
state: studies -> studies.favorites-list
为什么在导航到子路由时触发了解决方案?
答案 0 :(得分:1)
孩子们在ui-router中继承父母的决心。这是应该的方式。您可以重新排列代码,使其不是子状态。或者,可能(因为我没有尝试过这种方法),覆盖子状态中的resolve以返回null。