2 rest angularjs angular-routing angular-ui-router
我相信我已经走上了正确的轨道,这些术语,"嵌套的参数化路线",但还没有找到我正在寻找的东西.
我的目标是为我的API创建直观的路由,类似于以下示例:
/api/v1/project/list
/api/v1/project/1/item/list
/api/v1/project/1/item/1/edit
/api/v1/project/2/item/3/delete
Run Code Online (Sandbox Code Playgroud)
如何设置项目状态相对容易和清晰,但不是每个项目中的项目状态.
{
state: 'project'
config: {
url:'/project'
}
},
{
state: 'project.list'
config: {
url: '/list'
}
},
{
state: 'project.detail'
config: {
url: '/:project_id'
}
}
Run Code Online (Sandbox Code Playgroud)
我不清楚从哪里去,所以项目是相对的或嵌套在项目中.
我假设您有一个REST api(基于您的示例包含/api/v1),您希望将其作为UI公开/并行.我假设你想让用户深入挖掘一些分层数据模型.
对于此下钻列表/详细信息模式,您可以通过多种方式组织状态.没有一种是"正确"的方式,但有些可能比其他方式更好.我将重点介绍我使用过的两种方法:
一种方法是将"项目列表"状态和"项目详细信息"状态保持为兄弟姐妹.这就是你用project.list和做的project.details.这种方法可以在UI-Router Extras Demos源代码中看到.
采取这种方法时
状态:
projectlist //模板插入父ui-viewprojectdetail //模板插入父ui-view,替换 projectlistprojectdetail.itemslist//模板插入父ui-view(@projectdetail)projectdetail.itemdetail//模板插入父ui-view(@projectdetail),替换itemslist另一种方法是使详细状态成为列表状态的子项.这与REST路由类似.
采取这种方法时
状态:
top //理论上的父母状态top.projects//列出项目.插入父ui-view(@top)top.projects.project//项目详情.其命名视图以祖父母 ui-view(@top)为目标,从top.projects列表状态替换模板.top.projects.project.items//列出项目.插入父ui-view(@top.projects.project)top.projects.project.items.item//项目的详细信息.其命名视图以祖父母 ui-view(@top.projects.project)为目标,从top.projects.project.items列表状态替换模板.以下是使用命名视图定位来完成第二种方法的示例:
$stateProvider.state('top', {
url: '/',
template: '<ui-view/>',
});
$stateProvider.state('top.projects', {
url: '/projects',
resolve: {
projects: function(ProjectsRoute) {
return ProjectsRoute.getProjects();
}
},
controller: function($scope, projects) { $scope.projects = projects; },
template: '<li ng-repeat="project in projects"> <ui-view/>'
});
$stateProvider.state('top.projects.project', {
url: '/:projectid',
resolve: {
project: function(ProjectsRoute, $stateParams) {
return ProjectsRoute.getProject($stateParams.projectid);
}
}
views: {
'@top': {
controller: function($scope, project) { $scope.project = project; },
template: 'Project details: {{ project.name }} <a ui-sref=".items">view items</a> <ui-view/>'
}
});
$stateProvider.state('top.projects.project.items', {
url: '/projects',
resolve: {
items: function(ItemsRoute, project) {
return ItemsRoute.getItemsForProject(project.id);
}
},
controller: function($scope, items) { $scope.items = items; },
template: '<li ng-repeat="item in items"> <ui-view/>'
});
$stateProvider.state('top.projects.project.items.item', {
url: '/:itemid',
resolve: {
item: (ItemsRoute, $stateParams) {
return ItemsRoute.getItem($stateParams.itemid);
}
},
views: {
'@top.projects.project': {
controller: function($scope, item) { $scope.item = item; },
template: 'Item details: {{ item.name }}'
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |