2016-05-23 192 views
0

代碼從這裏取http://plnkr.co/edit/jcOwg8HgBGPtod4yCR5j?p=infoAngularJS注入另一模塊一個模塊並調用函數

我讀了下面的代碼,但直到現在我還困惑是如何notifytwo的實例越來越合格出廠通知?

工廠已通知函數調用sampleFun其調用函數另一家工廠的sampleFunTwo稱爲notifytwo,但我還沒有找到何時以及如何notifytwo的實例越來越通到工廠通知

請幫我理解代碼流程。感謝

var myModule= angular.module('MyServiceModuleOne', ['MyServiceModuleTwo']); 
myModule.controller('TestController', ['$scope', 'notify', function($scope, notify){ 
     $scope.getFn = function() { 
      notify.sampleFun(); 
     } 
     }]); 

    myModule.factory('notify', 
     function(notifytwo) { 
     return { 

     sampleFun: function() { 
         notifytwo.sampleFunTwo(); 

         },  
       }; 
     } 
    ); 



    var myModuleTwo= angular.module('MyServiceModuleTwo',[]); 
    myModule.factory('notifytwo', 
     function() { 
     return { 

     sampleFunTwo: function() { 
        alert('From notify two'); 
        }  
      }; 
     } 
    ); 
+0

這就是所謂的「依賴注入」。 Angular查找哪個依賴關係被稱爲'notifytwo',並注入工廠 – devqon

回答

0

的通知工廠能夠調用工廠notifyTwo因爲創建的實例時被注入notifyTwo通知:

myModule.factory('notify', 
    function(notifytwo) //RIGHT HERE IS WHERE IT'S INJECTED 
+0

通知實例已在控制器函數getFn()中創建,因此在模塊中注入了「MyServiceModuleTwo」,它足以調用? –

+1

這不是它實際發生的順序:當MyServiceModuleOne被引導時,依賴關係在angulars'$ injector'服務中註冊。該模塊依賴於'MyServiceModuleTwo',所以首先被啓動。然後'TestController'被註冊,而這又取決於工廠'notify'。因此,即使在控制器可以註冊之前,也會創建'notify'(或者'notify'的實例被獲取,如果它已經在其他地方創建的話)。最後'notify'-instance被傳遞給控制器​​,因此可以在運行時使用。 –

相關問題