我还处于 angularjs 开发的早期阶段。
我创建了一个单页应用程序。有几个区域调用 Controller ,其中嵌入了如下代码。
路线片段::
.when('/searchDrug/:searchStr', {
templateUrl: SNIPsArray['searchresultsSNIP'],
controller: 'searchDrugCtrl'
})
来自 Controller 的片段::
function ($scope, $http, $routeParams, $location) {
$http.get(url).success(function(data) {
if ( data.drugmaster.length == 1 ){
$location.path('/fetchDrug/'+data.drugmaster[0].drug_Id);
return;
}
$scope.druglist = data.drugmaster;
});
}
问题: 查看 angularjs 网站并阅读一些有关最佳实践的文章,建议将 $http 从 Controller 移动到服务。我正在寻求一些帮助,了解为此调用添加另一个级别和另一个文件的优点是什么?
最佳答案
可维护性
随着您的应用程序的增长,您会发现越来越需要将业务逻辑封装在某个地方。在 Angular 中,您可以使用服务来完成此操作。
封装
服务不仅允许您重用代码,还可以引入抽象和封装等良好原则。
更丰富的域名
还需要注意的是,您可能希望在从服务返回的内容之上引入一些额外的建模和功能。使用服务,您可以执行 http 调用之类的操作,然后将结果包装在带有一些方法的函数中。这会产生更丰富的领域模型和可读的代码。
例如,这里的搜索函数返回一个带有一些域逻辑的 promise ,以处理从服务返回的数据:
function ($scope, $routeParams, $search) {
$search($scope.drug)
.then(function(result){
$scope.drugList = result.getDrugList({include: ['title', 'description']});
});
}
测试
为依赖于服务的 Controller 编写测试并单独测试服务显然要好得多。
关于javascript - 为什么我应该将此 http 调用移至外部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679243/