2015-10-25 3 views
1

Я могу лениво загружать углы с помощью requirejs. Но как я могу загружать модули, которые должны быть связаны с контроллером?Загрузка внешних модулей при ленивой загрузке в угловом

Мой пример конфигурации в app.js выглядит следующим образом, загружая всех поставщиков и сохраняя ссылку.

var app = angular.module('myApp', ['ui.router']) 

var cacheProviders = {}; 

    app.getProvider = function() { 
     return cacheProviders.$provide; 
    } 

    app.getCompileProvider = function() { 
     return cacheProviders.$compileProvider; 
    } 

    app.getControllerProvider = function() { 
     return cacheProviders.$controllerProvider; 
    } 

    app.getFilterProvider = function() { 
     return cacheProviders.$filterProvider; 
    } 

app.config(['$stateProvider', '$urlRouterProvider', '$controllerProvider', '$compileProvider', '$filterProvider', '$provide', 
      function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) { 

      (function() { 
       cacheProviders.$controllerProvider = $controllerProvider; 
       cacheProviders.$compileProvider = $compileProvider; 
       cacheProviders.$filterProvider = $filterProvider; 
       cacheProviders.$provide = $provide; 
      })(); 

      var lazyCtrlLoad = function (controllerName) { 
       return ["$q", function ($q) { 
        var deferred = $q.defer(); 
        require([controllerName], function() { 
         deferred.resolve(); 
        }); 
        return deferred.promise; 
       }]; 
      } 
      $stateProvider.state('main.view2b', { 
        url: '/view2b', 
        templateUrl: 'forms/empl/searchEmplForm.html', 
        controllerAs: 'srchC', 
        controller: 'searchEmplCtrl', 
        resolve: { 
         loadOtherCtrl: lazyCtrlLoad('searchEmplCtrl') 
        } 
       }) 

В моем другом модуле, я пытаюсь зарегистрировать контроллеры, услуги нагрузки ..

define([ 
     'angular', 'angularResource' 
    ], function (angular) { 
     angular.module('myApp') 
     .getControllerProvider() 
     .register(ctrl, ...) 

Но, во время загрузки службы ниже, мне нужен доступ к $ ресурс, который является частью модуля ngResource в angularResource.

angular.module('myApp') 
    .getProvider().service('deptService', ['$resource', function ($resource) { 
     return $resource('/dept/:dept', {dept: '@_dept'}); 
    }]) 

Как я могу загрузить ngResource пока initalizing на JavaScript контроллеры/услуги лениво?

ответ

0

Посмотрите на AngularAMDhere. Он позволяет загружать контроллеры в u-router без использования lazyload. Этот AngularAMD используется для интеграции requireJs и Angular.

$stateProvider 
    .state('home', { 
    url: '', 
    views: { 
     '@': angularAmd.route({ 
     templateUrl: 'ngApplication/application/shared/layouts/basic/basicTplView.html', 
     controllerUrl: 'ngApplication/application/shared/layouts/basic/basicTplCtrl.js', 
     controller: 'basicTplCtrl' 
     }), 
     '[email protected]': angularAmd.route({ 
     templateUrl: 'ngApplication/application/shared/layouts/header/headerView.html', 
     controllerUrl: 'ngApplication/application/shared/layouts/header/headerCtrl.js', 
     controller: 'headerCtrl' 
     }) 
    }, 
}); 

Кроме того, вы используете requirejs, вы можете загрузить все зависимости для конкретного контроллера, используя define синтаксис requireJs. Допустим, вы хотите создать loginCtroller в отдельно файл, и этот контроллер зависит от другой угловой службы:

define(['app', 'transformRequestAsFormPostService'], function (app) { 
    app.controller('loginCtrl', ['$scope', '$rootScope', '$sce', '$http', '$state', 'transformRequestAsFormPostService', function ($scope, $rootScope, $sce, $http, $state, transformRequestAsFormPost) { 

     $scope.login = function() { 
     /*do something here using the service*/   
     }; 
    }]); 
}); 

Здесь зависимость называется transformRequestAsFormPostService еще один файл, я определил его в main.js (requireJs confifguration файл), и он определяется с использованием того же подхода, что и loginCtrol. Теперь я использую его в своем проекте и его работа до сих пор так хороша.

С уважением,

Эрнесто

Смежные вопросы