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

Muh*_*hid 5 asp.net-mvc design-patterns asp.net-web-api angularjs

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

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

jac*_*per 3

不要以 CRUD 之类的“操作”来看待控制器,在这种情况下,你是在“与 Restful API 对话”,因为 Restful 服务使用 HTTP 动词来映射 CRUD 操作,例如:

PUT, POST -> Create
GET       -> Read
POST      -> Update
DELETE    -> Delete
Run Code Online (Sandbox Code Playgroud)

一个好的做法是创建角度服务并返回 $resource 供以后使用,将 $resource 映射到您的 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'
            }

        });
    }
]);
Run Code Online (Sandbox Code Playgroud)

您可以重用该服务并将其注入任何其他服务或控制器中,控制器越精简越好。

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

坚持使用苗条控制器,创建服务和指令,你就可以开始了,最后我建议你使用 yeoman 作为工作流程并使用cg-Angular生成器,它实现了许多事情的“最佳实践”,包括应用程序文件夹结构从一开始就做好是非常重要的。