2015-12-21 47 views
0

我嘗試實現角度服務,控制器,指令,過濾器的延遲加載,我找到了使用RequireJS做類似事情的方法。但是我無法找到如何僅在需要時纔將服務加載到控制器中。只有在需要時才向控制器注入角度服務

我的控制器:

require(["app"], function (app) { 

    app.controller('dialogsCtrl',function($scope,dialogsSer){ 
    $scope.tooltip = function(){ 
     dialogsSer.tooltip(); // work ok 
    } 
... 

我想要實現類似的信息(也仍然可能注入的服務爲角內聯的方式):

require(["app"], function (app) { 

    app.controller('dialogsCtrl',function($scope){ 
    $scope.tooltip = function(){ 
     // load service only if tooltip function is called 
     require(["dialogsSer"], function (dialogsSer){ 
     dialogsSer.tooltip(); 
    ); 
    } 
... 

需要配置:

require.config({ 
baseUrl: ...,  
paths: { 
    .... 
    'dialogService':'resources/web/app/services/dialogsSer', 
    ... 
deps: ['app'] 
}); 

對話服務:

require(["app","directives"], function (app) { 

    app.service('dialogsSer', function($http,$uibModal){ 

    var ds = {}; 
    ... 

回答

0

我在運行時發現了插入服務的角$注入方法。

require(['dialogService','userSer'],function(){ 
    if(!$rootScope.userSer)$rootScope.userSer = $injector.get("userSer"); 
    if(!$rootScope.dialogsSer)$rootScope.dialogsSer = $injector.get("dialogsSer"); 
    $scope.$apply(); 
});