我是AngularJS的新手,我正在探索使用MVC启动应用程序的最佳实践。我在网上找到的选项有1.每个视图应该有一个控制器,控制器负责视图中的每个操作,所有需要的方法应该在单个服务中1.每个动作应该有一个视图和一个控制器,但是所有动作的所有方法都在同一个服务中。哪个是最好的?我还有一个问题。如果我们把所有的CRUD方法放在同一个服务中,并且如果我们在一个只需要get操作的视图中调用服务,那么它会增加这个特定视图的负载吗?
2cmtqfgy1#
我是一个相当大的项目的联合负责人。我们主要遵循以下做法:https://github.com/johnpapa/angular-styleguide关于你的具体问题:每个视图应该有一个控制器,控制器负责视图中的每个操作,所有需要的方法应该在单个服务中同意这是一个好办法。我们使用ui-router来实现这一点,您可以为每个路由定义URL,模板HTML页面和控制器。但是我建议你不要严格遵循这种方法。例如,在所有视图之间共享数据的情况下,我们使用定义头控制器的头包含。此外,说所有需要的方法都应该在一个服务中是荒谬的。例如,如果您的视图需要向2个不同的端点发出请求,那么这些请求可能会被组织到2个不同的服务中,因此您将同时注入这两个服务。重要提示:控制器的代码应该是最小的。它应该尝试在视图和服务方法之间提供钩子。重要提示:使用控制器As语法-不要到处使用$scope!这样就很容易看到哪个控制器与特定的方法相关联每个动作应该有一个视图和一个控制器。而是同一服务中所有操作的所有方法。听起来很疯狂跟我说话!除此之外,我还有一个问题。如果我们把所有的crud方法放在同一个服务中,并且如果我们在一个只需要get操作的视图中调用服务,那么它会增加这个特定视图的负载吗?如果你把所有的CRUD都放在同一个服务中,并且只使用GET,那么很明显,你是在不必要地注入那些不被使用的方法。但是,该服务将位于内存中,因此如果您将其注入到仅使用PUT的其他位置,那么这样做的成本将是最小的。代码组织和管理需要一定的开销,如果你是明智的,那么就不会有大问题。我们倾向于将since端点的所有CRUD操作组织到单个服务中。头控制器与ui.router结合的示例代码:ui.router配置将是:
.state('ou-details', { templateUrl: 'routes/ou/details/ou-details.html', controller: 'OuDetailsController', controllerAs: 'ouDetailsCtrl', url: '/ou/details/:id', authenticate: true }) .state('ou-edit', { templateUrl: 'routes/ou/edit/ou-edit.html', controller: 'OuEditController', controllerAs: 'ouEditCtrl', url: '/ou/edit/:id', authenticate: true })
等等index.html的主体看起来像这样:
<body data-ng-app="admin"> <header data-ng-include src="'includes/header/header.html'"></header> <section data-ui-view="data-ui-view"></section> <footer data-ng-include src="'includes/footer/footer.html'"></footer> </body>
header.html看起来像:
<div data-ng-controller="HeaderController as headerCtrl"> <div data-ng-bind="headCtrl.someProperty"/> </div>
(如果这个标记有一点错误,因为它是用JADE写的,我很抱歉,我只是把它扔进了一个转换器,这可能有点混乱)
1条答案
按热度按时间2cmtqfgy1#
我是一个相当大的项目的联合负责人。
我们主要遵循以下做法:https://github.com/johnpapa/angular-styleguide
关于你的具体问题:
每个视图应该有一个控制器,控制器负责视图中的每个操作,所有需要的方法应该在单个服务中
同意这是一个好办法。我们使用ui-router来实现这一点,您可以为每个路由定义URL,模板HTML页面和控制器。但是我建议你不要严格遵循这种方法。例如,在所有视图之间共享数据的情况下,我们使用定义头控制器的头包含。
此外,说所有需要的方法都应该在一个服务中是荒谬的。例如,如果您的视图需要向2个不同的端点发出请求,那么这些请求可能会被组织到2个不同的服务中,因此您将同时注入这两个服务。
重要提示:控制器的代码应该是最小的。它应该尝试在视图和服务方法之间提供钩子。
重要提示:使用控制器As语法-不要到处使用$scope!这样就很容易看到哪个控制器与特定的方法相关联
每个动作应该有一个视图和一个控制器。而是同一服务中所有操作的所有方法。
听起来很疯狂跟我说话!
除此之外,我还有一个问题。如果我们把所有的crud方法放在同一个服务中,并且如果我们在一个只需要get操作的视图中调用服务,那么它会增加这个特定视图的负载吗?
如果你把所有的CRUD都放在同一个服务中,并且只使用GET,那么很明显,你是在不必要地注入那些不被使用的方法。但是,该服务将位于内存中,因此如果您将其注入到仅使用PUT的其他位置,那么这样做的成本将是最小的。
代码组织和管理需要一定的开销,如果你是明智的,那么就不会有大问题。
我们倾向于将since端点的所有CRUD操作组织到单个服务中。
头控制器与ui.router结合的示例代码:
ui.router配置将是:
等等
index.html的主体看起来像这样:
header.html看起来像:
(如果这个标记有一点错误,因为它是用JADE写的,我很抱歉,我只是把它扔进了一个转换器,这可能有点混乱)