Angular:依賴注入

使用依賴注入

  • 像services, directives, filters, 和animations這些組件被定義經過可注入的factory方法或者構造函數。這些組件能夠注入"service" and "value" 組件做爲他們的依賴;
  • 經過構造函數定義的控制器能夠注入任意"service" and "value"做爲它的依賴,並且還能注入特別的依賴;
  •  run 方法接受一個能注入"service", "value" and "constant"做爲依賴的函數,注意不能注入"providers"到 run 代碼塊裏
  •  config 方法接受一個能注入"provider" and "constant" 組件做爲依賴的函數,注意不能注入"service" or "value"到配置項裏

Factory 方法

使用factory function定義一個directive, service, or filter。factory方法註冊的是一個模塊。如下是推薦聲明factory方法的方式:數組

angular.module('myModule', [])
.factory('serviceId', ['depService', function(depService) {
  // ...
}])
.directive('directiveName', ['depService', function(depService) {
  // ...
}])
.filter('filterName', ['depService', function(depService) {
  // ...
}]);

Module Methods

經過調用config 和run 方法指定函數運行配置和運行時模塊。這些函數都是可注入依賴的就像上面factory函數那樣。ide

angular.module('myModule', [])
.config(['depProvider', function(depProvider) {
  // ...
}])
.run(['depService', function(depService) {
  // ...
}]);

Controllers

控制器是「類」或「構造函數」,負責提供在模板中支持聲明性標記的應用程序行爲。推薦使用數組表示法來聲明控制器:函數

someModule.controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) {
  ...
  $scope.aMethod = function() {
    ...
  }
  ...
}]);

services不一樣,在應用程序中能夠有許多相同類型的控制器的實例。spa

並且,額外的依賴在控制器也是可用的:code

  • $scope: 控制器與DOM元素密切相關所以能夠訪問scope。其餘像services的組件只能訪問$rootScope;
  • resolves: 若是控制器實例化是route的一部分,那麼route部分的任何值解析注入到控制器均可用
相關文章
相關標籤/搜索