为了账号安全,请及时绑定邮箱和手机立即绑定

服务公司对安古拉工厂

服务公司对安古拉工厂

aluckdog 2019-06-18 13:27:15
服务公司对安古拉工厂我都见过安古拉尔工厂()和angular.service()用于声明服务;但是,i找不到 angular.service官方文件里的任何地方。这两种方法有什么区别?哪一个应该用来做什么(假设他们做不同的事情)?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

angular.service('myService', myServiceFunction);
  angular.factory('myFactory', myFactoryFunction);

我很难把我的头绕在这个概念上,直到我这样对自己说:

服务*功能你写的将会是新的-编辑:

  myInjectedService  <----  new myServiceFunction()

工厂*功能(构造函数)您编写的被调用:

  myInjectedFactory  <---  myFactoryFunction()

你做什么取决于你自己,但有一些有用的模式.

比如写一个服务函数公开公共API:

function myServiceFunction() {
  this.awesomeApi = function(optional) {
    // calculate some stuff
    return awesomeListOfValues;
  }}---------------------------------------------------------------------------------
  // Injected in your controller$scope.awesome = myInjectedService.awesomeApi();

或者使用工厂函数公开公共API:

function myFactoryFunction() {
  var aPrivateVariable = "yay";

  function hello() {
    return "hello mars " + aPrivateVariable;
  }

  // expose a public API
  return {
    hello: hello  };}---------------------------------------------------------------------------------
    // Injected in your controller$scope.hello = myInjectedFactory.hello();

或者使用工厂函数返回构造函数:

function myFactoryFunction() {
    return function() {
        var a = 2;
        this.a2 = function() {
            return a*2;
        };
    };}---------------------------------------------------------------------------------
    // Injected in your controllervar myShinyNewObject = new myInjectedFactory();$scope.four = myShinyNewObject.a2();

用哪一个?.

你可以用这两种方法完成同样的事情。但是,在某些情况下,工厂为您提供了更多的灵活性,以创建一个具有更简单语法的可注入性。这是因为MyInjectedService必须始终是对象,myInjectedFactory可以是对象、函数引用或任何值。例如,如果您编写了一个服务来创建构造函数(如上面的示例所示),则必须实例化它,如下所示:

var myShinyNewObject = new myInjectedService.myFunction()

可以说,这比这更不可取:

var myShinyNewObject = new myInjectedFactory();

(但首先您应该小心使用这种模式,因为新的-控制器中的ing对象创建了难以模拟用于测试的硬跟踪依赖项。与其使用服务,不如让服务为您管理对象集合。new()(诡计多端)


还有一件事,他们都是单身.。

还请记住,在这两种情况下,角是帮助您管理单例。无论您在何处注入服务或函数,也不管注入多少次,您都将得到对同一个对象或函数的相同引用。(工厂只返回数字或字符串之类的值时除外。在这种情况下,您将始终得到相同的值,而不是引用。)


查看完整回答
反对 回复 2019-06-18
?
MYYA

TA贡献1868条经验 获得超4个赞

简单地说.。

// Serviceservice = (a, b) => {
  a.lastName = b;
  return a;};// Factoryfactory = (a, b) => Object.assign({}, a, { lastName: b });

const fullName = { firstName: 'john' };


// Service

const lastNameService = (a, b) => {

  a.lastName = b;

  return a;

};

console.log(lastNameService(fullName, 'doe'));


// Factory

const lastNameFactory = (a, b) => 

  Object.assign({}, a, { lastName: b })

console.log(lastNameFactory(fullName, 'doe'));


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 488 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信