处理数据服务或控制器
Process data - in service or controller?
这是一个关于代码组织和最佳实践的问题。
我从一个api与$资源检索数据,我需要处理它发送到视图之前。
我的问题是在哪一步处理实际数据。我的理解是,它应该在服务中完成,但我也想在控制器中进行实际的ajax调用。
就像现在一样,我注入服务并使用CdnService.sumOfVolumeRequest(response)等函数来处理数据。
我做的对吗?还是有更好的方法?
:
function updateVolumeRequest() {
var params = {
metric: "size",
tStart: convertUtcToEpoch(SearchCriteria.criteria.dateFrom),
tEnd: convertUtcToEpoch(SearchCriteria.criteria.dateTo)
};
return params;
}
function volumeRequest() {
return CdnAnalyticsFactory.statsByDimension({
accountId: Token.UserInfo().Id
},
updateVolumeRequest())
.$promise;
}
控制器:
function getData() {
var data;
CdnService.sizeRequest(SearchCriteria.criteria.dateFrom, SearchCriteria.criteria.dateTo)
.then(function onSucess(response) {
data = CdnService.sumOfVolumeRequest(response)
});
}
请参考John Papa的Angular Style Guide
问题是:服务应该是模块化的吗?你是否能够在另一个控制器中注入相同的服务,并保留相同的功能,使其即插即用?重构进行数据操作和与工厂数据交互的逻辑。让数据服务负责XHR调用、本地存储、内存存储或任何其他数据操作。
如果您希望服务是自给自足的,那么最好在服务本身中进行数据争用。其思想是让服务在每次调用时都以所需的格式提供数据。如果将某些功能移出,则需要重复该代码。这是违反DRY原则的。
当然,有多少数据操作需要在服务内部进行,有多少需要在服务外部进行,这取决于您。如果你在控制器中编写的代码是特定于你的控制器的逻辑,那么在控制器中编写它是可以的。但是,建议不要包含每次调用服务时都需要重复的代码。
这取决于上下文。
如果逻辑与视图无关,你可以将代码移动到服务中,以便你可以在其他控制器中重用它但是如果有特定于视图的逻辑,你可以在控制器
相关文章:
- 尝试将服务链接到控制器时出现角度问题
- 使用服务(AngularJS)在控制器之间共享数据
- 从AngularJS中的另一个文件中的控制器访问服务
- AngularJS 1.5.x服务未正确绑定,并且未在控制器中更新
- Ionic将firebase注入工厂,同时将控制器和服务保存在不同的文件中
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Http服务工厂将未定义的返回到Angular中的控制器
- 由控制器调用的服务更改时,Angular未更新视图
- 将Browserify与Angular JS结合使用--将服务传递到控制器中
- 将工厂服务数据发送到控制器,以便在视图中使用
- 角度控制器服务承诺不起作用
- 跨控制器服务的角度json数据
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 推迟在应用程序运行angularjs上创建控制器/服务
- 将主机配置传递给控制器/服务
- 控制器/服务的最佳实践
- 控制器+服务结构不能正确触发离子切换ng-change
- 未捕获的TypeError: undefined不是函数'当把控制器/服务放在单独的js文件中时
- 一个AngularJS文件中有多少控制器(服务、工厂、指令)
- 我应该保护我的 Angular 控制器/服务免受全局命名空间的影响吗?