1

我正在测试应用程序中实现我的第一个 AngularJS 控制器,但遇到了一些困难。

我有一个从 RESTful Web 服务获取的项目列表,我正在尝试为这些项目实现基本的 CRUD 逻辑。

该列表显示在itemsList.htm页面中,路由配置为:

app.config(function ($routeProvider) {
    $routeProvider
        .when('/items',
            {
                controller: 'ItemsController',
                templateUrl: 'app/Partials/itemsList.htm'
            })
        .when('/items/:itemID',
            {
                controller: 'ItemsController',
                templateUrl: 'app/Partials/editItem.htm'
            })
        .otherwise({ redirectTo: '/items' });
});

然后我有我的ItemsController

app.controller('ItemsController', function ($scope, $routeParams, $location, itemsService) {
    $scope.status;
    $scope.items;

    getItems();

    function getItems() {
        itemsService.getItems()
            .success(function (items) {
                $scope.items = items;   
            })
            .error(function (error) {
                $scope.status = 'Unable to load items: ' + error.message;
            });
    }

    function getItem(ID) {
        // ...  
    }
}

现在我想向同一个控制器添加一个函数,该函数返回一个传递其 ID 并填充editItem.htm页面的某个项目,但我不知道我要访问这个函数......

我的意思是:我怎样才能映射/items/:itemID到这个函数的路径?我应该在不同的控制器中实现它并更改路由配置吗?

注意我通常使用 Java 和 Spring MVC 实现我的 Web 应用程序,并且我通常为我的应用程序中的每个实体实现一个控制器(例如:ItemsController、CustomersController 等)。AngularJs 也遵循这条规则是否正确,或者还有其他一些最佳实践?

4

1 回答 1

1

我将采取的方法是实现一次ItemController只处理一个项目的 a 。同样,它取决于 html 的结构。

在任何情况下,您都需要使用 $routeParams 集合检索选定的项目 id。

在控制器中你可以做

if($routeParams.itemID) {
   //you got the id. call the getItem
   getItem(itemID).success(function(item) {
       $scope.item=data;
   });
}

如果您使用相同的控制器,则必须将这部分添加到 ItemsController 中,或者如果您创建一个新的控制器,仍然需要进行相同的检查。

如果您使用现有的 ItemsController 实现应该像

 if($routeParams.itemID) {
       //same as above code
 }
 else {
     getItems();
 }

这意味着您不想在单个项目视图的范围内加载列表。

于 2013-10-02T16:32:16.860 回答