Just do IT --- Angular(二)

依賴注入

依賴注入是angularJs的特性。在支持依賴注入的函數中注入咱們想使用的服務,若是模塊註冊的有這個服務,就可使用.目的是處理代碼之間的依賴關係,減小組件間的耦合
原理:經過構造函數的參數名字來推斷依賴服務名稱的,經過 toString() 來找到這個定義的 function 對應的字符串,而後用正則解析出其中的參數(依賴項),再去依賴映射中取到對應的依賴,實例化以後傳入。

一句話 --- 沒事你不要來找我,有事我會去找你。
javascript

供應商(provider)的方法(factory(),service(),provider())

http://www.javashuo.com/article/p-qjsxkgdn-t.html
供應商==>泛指provider
服務==>泛指service
provider==>provider()方法建立的東東
service==>service()方法建立的東東
$provide服務負責告訴Angular如何創造一個新的可注入的東西:即服務。服務會被叫作供應商的東西來定義,你可使用$provide來建立一個供應商。你須要使用$provide中的provider()方法來定義一個供應商,同時你也能夠經過要求$provide被注入到一個應用的config函數中來得到$provide服務。java

myMod.config(function($provide) {
  $provide.provider('greeting', function() {
    this.$get = function() {
      return function(name) {
        alert("Hello, " + name);
      };
    };
  });
});

value() : Value 是一個簡單的 javascript 對象,用於向控制器傳遞值(配置階段):angularjs

var app = angular.module('app', []);

 app.config(function ($provide) {
  $provide.value('movieTitle', 'The Matrix')
});
 
app.controller('ctrl', function (movieTitle) {
  expect(movieTitle).toEqual('The Matrix');
})

service(): 可注入的構造器,在AngularJS中它是單例的,用它在Controller中通訊或者共享數據都很合適segmentfault

app.service('movie', function () {
  this.title = 'The Matrix';
});

factory() : 可注入的function,它和service的區別就是:factory是普通function,而service是一個構造器(constructor),這樣Angular在調用service時會用new關鍵字,而調用factory時只是調用普通的function,因此factory能夠返回任何東西,而service能夠不返回(可查閱new關鍵字的做用)app

app.factory('movie', function () {
  return {
    title: 'The Matrix'
  }
});

provider():provider必須有一個$get方法,固然也能夠說provider是一個可配置的factoryide

var app = angular.module('app', []);
 
app.provider('movie', function () {
  var version;
  return {
    setVersion: function (value) {
      version = value;
    },
    $get: function () {
      return {
          title: 'The Matrix' + ' ' + version
      }
    }
  }
});
 
app.config(function (movieProvider) {
  movieProvider.setVersion('Reloaded');
});
 
app.controller('ctrl', function (movie) {
  expect(movie.title).toEqual('The Matrix Reloaded');
});

注意這裏config方法注入的是movieProvider,上面定義了一個供應商叫movie,可是注入到config中不能直接寫movie,由於前文講了注入的那個東西就是服務,是供應商提供出來的,而config中又只能注入供應商(兩個例外是$provide和$injector),因此用駝峯命名法寫成movieProvider,Angular就會幫你注入它的供應商。函數

全部的供應商都只被實例化一次,也就說他們都是單例的
除了constant,全部的供應商均可以被裝飾器(decorator)裝飾
value就是一個簡單的可注入的值
service是一個可注入的構造器
factory是一個可注入的方法
decorator能夠修改或封裝其餘的供應商,固然除了constant
provider是一個可配置的factorythis

相關文章
相關標籤/搜索