Javascript 角度控制器结构

Javascript 角度控制器结构,javascript,angularjs,model-view-controller,controller,Javascript,Angularjs,Model View Controller,Controller,所以我试图以一种简单的方式设计一个简单的角度控制器 基本上a有两种观点。一个是#/items另一个是#/archiveditems 这些页面完全相同,只是一个页面显示存档项目的列表,另一个页面显示当前项目。还有一个类似于{{itemState}}Items的 我有一个角度工厂设置,它返回的对象看起来像{items:$resource(/api/items),archivedtems:$resource(/api/archivedtems)} 目前我有两个独立的控制器。两者的代码几乎相同。唯一的区

所以我试图以一种简单的方式设计一个简单的角度控制器

基本上a有两种观点。一个是
#/items
另一个是
#/archiveditems

这些页面完全相同,只是一个页面显示存档项目的列表,另一个页面显示当前项目。还有一个类似于
{{itemState}}Items的

我有一个角度工厂设置,它返回的对象看起来像
{items:$resource(/api/items),archivedtems:$resource(/api/archivedtems)}

目前我有两个独立的控制器。两者的代码几乎相同。唯一的区别是
$scope.itemState
Api.archivedItems.query()
vs
Api.items.query()

下面是控制器的详细外观

app.controller('currentItemsController', function($scope, Api){

    $scope.itemState = 'Current';

    $scope.items = Api.items.query(function () {

});

app.controller('archivedItemsController', function($scope, Api){

    $scope.itemState = 'Archived';

    $scope.items = Api.archivedItems.query(function () {

});

我觉得有一种优雅的方式可以将这两个控制器合并为一个。任何帮助都将不胜感激

您可以对/items/:type进行路由设置

然后在控制器中,类似于:

app.controller('itemsController', function($scope, Api, $routeParams){

    var isArchive = $routeParams.type == 'archived';
    $scope.itemState = isArchive ? 'Archived' : 'Current';
    $scope.items = Api[isArchive ? 'items' : 'archivedItems'].query(function () { ... });

});

因此,当您调用/items/archive时,它将处理您的归档项目。。另外,如果您的API返回相同的内容-为什么不传递一个标志“isArchived”而不是一个单独的资源?

是的,我想传递一个标志,或者甚至做
items:$resource('/API/items/:state')
但是写
API.items.query({state:'archived'))
似乎与编写
Api.archivedItems.query()
相同。如果存在多个状态,则传递标志似乎更有意义。