一次性搞明白 service和factory區別


原文鏈接

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

    

  等下,已經有一篇文章回答了'Service和Factory的區別’,那我該起個什么樣的標題呢?

  這個網上已經有很多人討論過,我這篇就看起來就多余了。然而我們還是經常看到這個
  即使你看了很多StackOverflow上的回答 ,還是一頭霧水。而且那些例子都有些老了,不適合一些新的平台,比如ES6!
 
  這里總結下service和factory的區別,以及為什么我們 最好使用service。
 
  好了,那到底這兩個在angularjs里有啥區別?我們都知道,可以這樣定義Service:
app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});

  .service()方法用來在我們模塊里定義一個service服務,它接收一個字符串名字和一個方法作為參數。也就是說,當我們定義好一個service,就可以在我們的其他組件里注入和使用,比如controllers,directives和filters:

app.controller('AppController', function (MyService) {
  MyService.sayHello(); // logs 'hello'
});

  好,現在看下,用Factory進行同樣的實現

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

  .factory()方法一樣,接收一個字符串名字和一個方法兩個參數,來定義一個factory, 和service一樣,在其他地方注入使用。那么區別在哪?

  可能你已經發現了,service在使用this指針,而factory直接返回了一個對象。為什么?因為Service是一個構造函數,但Factory不是。在Angular的底層,當這段代碼在Service構造函數初始化的時候,會去調用object.create()。而Factory就一個普通被調用的方法,所以它要顯式地返回一個對象。

  為了弄明白,我們來看下factory在angular里的源碼:

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM