我有一个角度服务,负责代表一组员工(恰好存储在数据库中)。我听说在服务类的构造函数中执行$http.get
请求是不好的代码味道。我被告知的是,我应该注入允许你收集相关数据的依赖项,但这不是我使用$http
使用依赖项注入做的事情吗?
简单地从服务器执行var employees = $http.get('employees')
是不好的形式?
非常感谢!
答案 0 :(得分:1)
服务是您的模型,所有对您服务器的呼叫都应集中在服务中。
如果我从你的例子开始,你应该有一个“EmployeeService” 并在其中的功能:(不要忘记注入$ q和$ http服务)
me = this;
me.cacheEmployee = null;
me.getEmployees = function(){
var deferred = $q.defer();
if(me.cacheEmployee != null){
deferred.resolve(me.cacheEmployee);
}else{
$http.get('urlToEmployee').success(function(result){
me.cacheEmployee = result;
deferred.resolve(me.cacheEmployee);
});
}
return deferred.promise;
};
me.forceLoadEmployee = function(){ // after each CreateUpdateDelete operations
var deferred = $q.defer();
$http.get('urlToEmployee').success(function(result){
me.cacheEmployee = result;
deferred.resolve(me.cacheEmployee);
});
return deferred.promise;
};
在页面的控制器中,您要显示您的员工(不要忘记注入EmployeeService)
EmployeeService.getEmployees().then(function(result){
$scope.employees = result;
});
您使用异步调用,无法以程序方式思考解决问题。
关于承诺的基本文档:https://docs.angularjs.org/api/ng/service/ $ q
我希望我的回答能适合你。
度过美好的一天!
编辑:现在您有一个缓存中的员工列表,该呼叫将仅在第一次启动到服务器。