在Angular的服务构造函数中从服务器请求数据被认为是一种不好的做法吗?

时间:2014-09-16 06:26:16

标签: angularjs dependency-injection angularjs-service

我有一个角度服务,负责代表一组员工(恰好存储在数据库中)。我听说在服务类的构造函数中执行$http.get请求是不好的代码味道。我被告知的是,我应该注入允许你收集相关数据的依赖项,但这不是我使用$http使用依赖项注入做的事情吗?

简单地从服务器执行var employees = $http.get('employees')是不好的形式?

非常感谢!

1 个答案:

答案 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

我希望我的回答能适合你。

度过美好的一天!

编辑:现在您有一个缓存中的员工列表,该呼叫将仅在第一次启动到服务器。