Angularjs中每个视图应该有一个控制器吗?

时间:2014-11-18 13:46:48

标签: asp.net-mvc angularjs design-patterns asp.net-web-api

我来自asp.net mvc背景,最近开始使用Angularjs。我有一个名为Account的简单实体,它通过RESTful asp.net web api公开。我现在正在使用Angular创建其客户端。在客户端,我有创建,编辑,列表和详细信息等视图。

我应该为每个视图创建一个控制器,还是只有一个名为`accountsController'的控制器?对于所有CRUD操作?这种情况下的标准做法是什么?

3 个答案:

答案 0 :(得分:3)

不要像CRUD那样在“操作”方面寻找控制器,在这种情况下,yu“正在与一个宁静的API交谈”,因为restful服务使用HTTP动词来映射CRUD操作,例如:

PUT, POST -> Create
GET       -> Read
POST      -> Update
DELETE    -> Delete

一个好的做法是创建角度服务并返回$资源供以后使用,将$资源映射到CRUD端点,如下所示:

angular.module('app').factory('Users', ['$resource',
    function($resource) {
        return $resource('users', {}, {
            update: {
                method: 'PUT'
            },
            deleteMember: {
                method: 'DELETE', 
                url:'team/member/:userId/:teamId'
            },
            addMember: {
                method: 'POST', 
                url:'team/member'
            },
            addTeam: {
                method: 'POST', 
                url:'team'
            },
            deleteTeam: {
                method: 'DELETE',
                url: 'team/:teamId'
            },
            getTeam: {
                method: 'GET',
                url: 'team/:teamId'
            },
            teams: {
                method: 'GET',
                url: 'team/list/:orgId'
            }

        });
    }
]);

您可以重复使用该服务并将其注入任何其他服务或控制器,您的控制器越细。

如果您想要修改UI,因为angular是声明性的而不是命令性的,不建议从控制器修改dom,您需要再次创建指令,指令可以在整个系统中重用。

坚持使用超薄控制器,创建服务和指令,你很高兴,最后我建议你使用yeoman作为工作流程并使用cg-angular生成器,它实现了很多东西的“最佳实践”包括应用程序文件夹结构,从一开始就非常重要。

答案 1 :(得分:1)

我认为最佳做法是为每个表单(视图)声明一个控制器。 您还可以使用服务或$ rootScope

在控制器之间共享函数和变量

答案 2 :(得分:1)

我会为每个视图使用一个控制器和路由:

/user/edit, userEditController.js, userEdit.html
/user/view, userViewController.js, userView.html