我目前正在处理一个小型应用程序,该应用程序显示了一个向下钻取的信息。菜单类型。与TreeView不同,我的组件只显示当前级别。
只有3个级别:main,submenu,item。深入钻取(在项目上)将导致与所选项目的详细视图对应的新状态。
我只有2个状态,第一个状态对三个级别中的任何一个都有效。第二个是详细状态:
$stateProvider.state('menu', {
url: '/menu/:submenu/:item',
templateUrl: 'src/menu/views/menu.html',
controller: 'MenuController',
controllerAs: 'MenuController',
resolve: {
data: function($stateParams, MenuService){
return MenuService.loadUri($stateParams);
}
}
}).state('menu.details', {
url: '/:selectedItem',
templateUrl: 'src/menu/views/menu-details.html',
controller: 'MenuDetailsController',
controllerAs: 'MenuDetailsController',
resolve: {
data: function($stateParams, MenuService){
return MenuService.loadUri($stateParams);
}
}
});
此解决方案正常运行,但我有点恼火,我需要两次定义resolve
方法。我需要这样做,因为$stateParams
只包含那个确切状态的参数(不包括子状态),我需要所有参数来形成一个有效的URL来通过MenuService
获取相应的资源。
我知道state.params
可用于获取所有状态参数,但它似乎无法在resolve方法中工作:它包含之前的州。
有人知道如何解决这个问题吗?拥有一个只应触发新视图的子状态,同时使用具有所有状态参数的父状态的resolve方法?
如果您认为我完全误解了各州的运作方式,那么请继续告诉我:)