我应该在AngularJS中使用工厂(factory)还是服务(service)来获取数据?

22 浏览
0 Comments

我应该在AngularJS中使用工厂(factory)还是服务(service)来获取数据?

我正在学习AngularJS,我已经设置了一个非常简单的项目。

我有一个名为ApiService.js的文件,用于从某个RESTful服务器中获取数据。目前它看起来是这样的:

var module = angular.module('MyProject.services', []);
module.service('ApiService', function() {
    this.getDataList = function() {
       ...
       ...
    }
});

然后我有一个控制器,像这样使用它:

var module = angular.module('MyProject.controllers', []);
module.controller('dataController', function($scope, ApiService) {
    $scope.dataList = ApiService.getDataList();
});

我不确定我应该在services.js中使用module.service还是module.factory(这也让我困惑,因为约定是将factory放在那里,而我知道factory和service在常规软件设计模式中的区别,但我不知道我应该怎么做才符合Angular方式。

什么是正确的,service还是factory?

0
0 Comments

在AngularJS中,我们可以使用factory或service来获取数据。但是,很多人对factory和service之间的区别感到困惑。在本文中,我们将解释factory和service的区别,并提供一些解决方法。

factory和service都是AngularJS中用于创建单例对象的方法。factory允许您手动创建一个对象,并且每次访问该factory时,都会返回同一个对象。而service在第一次引用时会调用'new'关键字创建一个新对象,然后每次访问服务时都会返回这个对象。

factory的用法如下:

MyApp.factory('MyObjectFactory', function(){
    return new MyObject();
});

通过这种方式创建的factory返回的是一个对象实例,而不是一个函数。因此,每次访问factory时,都会得到同一个对象。

service的用法如下:

MyApp.service('MyObjectService', MyObject);

通过这种方式创建的service返回的是一个函数,而不是一个对象实例。当第一次访问service时,会调用'new'关键字创建一个新对象,并返回该对象。之后每次访问service时,都会返回同一个对象。

所以,当我们需要在不同的控制器之间共享数据或功能时,可以使用service。但是,如果我们只需要一个对象实例,并且不需要在不同的控制器之间共享数据或功能时,可以使用factory。

factory和service之间的区别非常微小,具体使用哪个方法取决于您的需求和个人偏好。

0