2015-12-21 1 views
0

Я пытаюсь реализовать ленивую загрузку угловых сервисов, контроллеров, директив, фильтров, я нашел способ сделать что-то подобное с помощью RequireJS. Но я не могу найти, как динамически загружать сервис в контроллер только тогда, когда это необходимо.Inject Угловое обслуживание контроллера только в случае необходимости

Мой контроллер:

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(); 
});