AngularJS Factory中enforce参数的含义是什么?

时间:2016-06-08 13:55:47

标签: javascript angularjs angular-services

我正在通过使用module.factory()方法来了解角度实际创建工厂的细节。

我发现内部角度使用以下方法,内部仅使用提供程序

function factory(name, factoryFn, enforce) 

所以我的问题是关于这个函数的第三个参数enforce,它实际上是做什么的。

1 个答案:

答案 0 :(得分:1)

在幕后创建Angular服务或工厂时,Angular最终会对两者使用相同的功能:

function factory(name, factoryFn, enforce) {
  return provider(name, {
    $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
  });
}

创建服务时,通常不会发送返回值,并且在幕后调用Object.create()来创建包含sayHello方法的对象。

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});

但是,在创建工厂时,会返回一个对象文字:

app.factory('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

基本上,强制执行用于强制执行返回值。这不仅仅是“这是服务还是工厂?”的问题。因为如果你想要,你仍然可以从服务返回一个对象文字:

app.service('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

关于这个问题:“你应该使用哪个?”看看这个:

http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html