2016-05-23 148 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被传递给控制器​​,因此可以在运行时使用。 –

相关问题