2013-03-01 2 views
11

Я пытаюсь использовать AngularJS и RequireJS в комбинации. Я хотел бы использовать службу $routeProvider и не загружать все контроллеры для своих просмотров при запуске приложений. Для этого я попробовал следующее:Использование контроллеров маршрутизации и загрузки AngularJS по требованию с использованием requirejs

define(['require', 'angular', 'appModule'], function (require, angular, app) { 
    app.config(['$routeProvider', function($routeProvider) { 
     $routeProvider 
      .when('/sites', {templateUrl: '/Site/GetSitesView', controller: function() { 
      require(['sitesController'], function(SitesController) { 
       return new SitesController(); 
      }) 
     }}) 
    }]); 
}); 

К сожалению, это не сработало для меня. Ошибок нет. Файл JS, содержащий контроллер, загружается правильно, но я не вижу значения привязки данных в визуализированном представлении. Мне было интересно, могу ли я присвоить значение controller каким-то другим способом, который будет ждать завершения асинхронного вызова (для загрузки файла JS).

Любые идеи?

+5

Единственный способ сделать это - получить $ controllerProvider. У меня есть рабочее решение здесь: https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ matys84pl, что на самом деле соответствует тому, что я собирался делать. Спасибо, что поделились этим. Одна вещь, однако, я просмотрел код и увидел, что вы загружаете шаблоны с помощью плагина Require Text, это единственный способ загрузки шаблонов с помощью вашей библиотеки? Что делать, если я хочу загрузить шаблон из URL-адреса на сервере, будет ли это работать? – Kassem

+0

Это зависит от того, является ли URL-адрес относительно вашего приложения .. другими словами, он находится в том же домене? Если нет, то я думаю, вам нужно будет использовать какой-то прокси-сервер для достижения этого (для загрузки файлов из другого домена). – matys84pl

ответ

4

Вы можете найти решение here

Вы должны определить свойство решимости на каждый маршрут и назначить ему функцию, которая возвращает обещание. Функция может динамически загружать сценарий, содержащий целевой контроллер, и разрешать обещание после завершения загрузки. В этом article, Дэн Вахлин показывает, как использовать соглашение по конфигурации для более практичной маршрутизации.

+0

Спасибо за сообщение. Помог мне много! – VishwaKumar

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