AngularJs Managing Service Dependencies詳解_AngularJS

來源:互聯網
上載者:User

  angular允許service將其他service聲明為依賴,使用在自身執行個體化時使用的建構函式中。

  為了聲明依賴,我們需要在Factory 方法聲明中指定它們,並且在Factory 方法中通過$inject屬性(字串標識數組)或者使用array notation。

  通常$inject屬性聲明可以被丟棄(即http://www.jb51.net/article/91815.htm中提到的隱式依賴注入,但這個是實驗屬性,在而且在壓縮混淆後會失效,慎用!)。

使用array notation

function myModuleCfgFn ($provide) {  $provide.factory(‘myService',[‘dep1','dep2',function(dep1,dep2){}]);}

使用$inject屬性   

function myModuleCfgFn($provide) {   var myServiceFactory = function(dep1, dep2) {};   myServiceFactory.$inject = ['dep1', 'dep2'];   $provide.factory('myService', myServiceFactory); }

使用隱式DI(不相容壓縮混淆的代碼)

function myModuleCfgFn($provide) {  $provide.factory('myService', function(dep1, dep2) {});}

       下面有一個例子,裡面有兩個service,它們之間存在依賴關係,以及其他一些angular提供的service。

 /** * batchLog service 允許訊息在記憶體中形成隊列,50秒flush一次。 * * @param {*} message Message to be logged. */ function batchLogModule($provide){   $provide.factory('batchLog', ['$timeout', '$log', function($timeout, $log) {     var messageQueue = [];     function log() {       if (messageQueue.length) {         $log('batchLog messages: ', messageQueue);         messageQueue = [];       }       $timeout(log, 50000);     }     log();      return function(message) {       messageQueue.push(message);     }   }]);   /**   * routeTemplateMonitor監控每一個route的變化,每個比阿奴啊都會通過batchLog service記錄下來   */   $provide.factory('routeTemplateMonitor',     ['$route', 'batchLog', '$rootScope',     function($route, batchLog, $rootScope) {       $rootScope.$on('$routeChangeSuccess', function() {         batchLog($route.current ? $route.current.template : null);       });   }]); } // 獲得主service,運行應用(監聽事件)  angular.injector([batchLogModule]).get('routeTemplateMonitor');

例子中需要注意的事項:

  1. batchLog service依賴angular內建的$timeout(http://docs.angularjs.org/api/ng.$timeout)與$log services(http://docs.angularjs.org/api/ng.$log),實現通過console.log批量log訊息。
  2. routeTemplateMonitor service依賴內建的$route(http://docs.angularjs.org/api/ng.$route) service與我們自訂的batchLog service。
  3. 我們兩個service都使用Factory 方法簽名以及array notation來注釋inject,聲明它們的依賴。array中的字串標識的順序與Factory 方法簽名(參數)中的順序必須一致,這十分重要。除非在Factory 方法參數中使用隱式依賴聲明,否則,injector將根據array中字串的順序決定inject哪一個服務。

以上就是關於AngularJs Managing Service Dependencies 資料的整理,後續繼續添加相關資料,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.