provider提供者 - acelan86/angular GitHub Wiki

全局provider的初始化

  //publishExternalAPI方法中有这么一段,前面接触过很多次
  ...
  angularModule('ng', ['ngLocale'], ['$provide',
    function ngModule($provide) {
      ....//注册一些全局指令
      
      //注册全局provider,该page重点
      $provide.provider({
        $anchorScroll: $AnchorScrollProvider,
        $browser: $BrowserProvider,
        $cacheFactory: $CacheFactoryProvider,
        $controller: $ControllerProvider,
        $document: $DocumentProvider,
        $exceptionHandler: $ExceptionHandlerProvider,
        $filter: $FilterProvider,
        $interpolate: $InterpolateProvider,
        $http: $HttpProvider,
        $httpBackend: $HttpBackendProvider,
        $location: $LocationProvider,
        $log: $LogProvider,
        $parse: $ParseProvider,
        $route: $RouteProvider,
        $routeParams: $RouteParamsProvider,
        $rootScope: $RootScopeProvider,
        $q: $QProvider,
        $sniffer: $SnifferProvider,
        $templateCache: $TemplateCacheProvider,
        $timeout: $TimeoutProvider,
        $window: $WindowProvider
      });
    }
  ]);

  ...

$XxxProvider

每个$XxxProvider都必须有一个$get的方法,获取$XxxProvider提供的实际$Xxx

function $XxxProvider() {
  this.$get = ['$dependences', function ($dependences) { ... }];
}

这个$get方法在injector.invoke的时候传递进去, 在invoke的getService(name)中被执行并返回$Xxxx