我在我的angularjs开发中很早。
我创建了一个单页应用。有几个区域调用控制器,其中嵌入了如下代码。
来自路线:: 的 片段
片段:: 问题:
在angularjs网站上查看并阅读一些关于最佳实践的文章,建议将$ http从控制器移动到服务。我正在寻找一些帮助,为这次调用添加另一个级别和另一个文件的优势是什么?
来自控制器的.when('/searchDrug/:searchStr', {
templateUrl: SNIPsArray['searchresultsSNIP'],
controller: 'searchDrugCtrl'
})
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;
});
}
答案 0 :(得分:1)
<强>可维护性强>
随着应用程序的增长,您会发现越来越需要在某处封装业务逻辑。在角度,你使用服务做到这一点。
<强>封装强>
服务不仅允许您重用代码,还引入了抽象和封装等良好原则。
更丰富的域名
值得注意的是,您可能希望在服务中获得的内容之外引入一些额外的建模和功能。使用服务,您可以执行诸如http调用之类的操作,然后将结果包含在函数中,并使用某些方法。这导致更丰富的域模型和可读代码。
例如,这里搜索函数返回一个带有一些域逻辑的promise来按摩从服务返回的数据:
function ($scope, $routeParams, $search) {
$search($scope.drug)
.then(function(result){
$scope.drugList = result.getDrugList({include: ['title', 'description']});
});
}
<强>测试强>
为控制器编写测试显然要好得多,后者依赖于服务并自行测试服务。
答案 1 :(得分:0)
由于代码重用,可维护性和可测试性。测试资源是一个独立的过程,而不是测试整个控制器。