2013-03-01 15 views
11

Próbuję użyć kombinacji AngularJS i RequireJS. Chciałbym skorzystać z usługi $routeProvider i uniknąć konieczności ładowania wszystkich kontrolerów dla moich widoków dotyczących uruchamiania aplikacji. Do tego, próbowałem następujące:Używanie kontrolerów routingu i ładowania AngularJS na żądanie przy użyciu 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(); 
      }) 
     }}) 
    }]); 
}); 

Niestety, to nie dla mnie. Nie ma błędów. Plik JS zawierający kontroler jest ładowany poprawnie, ale nie widzę powiązanej wartości danych w renderowanym widoku. Zastanawiam się, czy mogę przypisać wartość controller w jakiś inny sposób, który będzie czekać na wywołanie asynchroniczne (załadować plik JS), aby zakończyć.

Wszelkie pomysły?

+5

Jedynym sposobem na zrobienie tego jest uzyskanie kontrolera $ controllerProvider. Mam działające rozwiązanie tutaj: https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ matys84pl, który faktycznie jest zgodny z tym, co zamierzałem zrobić. Dziękuję za udostępnienie tego. Jedną rzeczą, że przejrzałem kod i zobaczyłem, że ładujesz szablony za pomocą wtyczki Wymagaj tekstu, czy jest to jedyny obsługiwany sposób ładowania szablonów za pomocą biblioteki? Co się stanie, jeśli chcę załadować szablon z adresu URL na serwerze? – Kassem

+0

To zależy, czy adres URL jest związany z Twoją aplikacją. Innymi słowy, czy jest on w tej samej domenie? Jeśli nie, to myślę, że do tego celu musiałbyś użyć jakiegoś proxy (aby załadować pliki z innej domeny). – matys84pl

Odpowiedz

4

można znaleźć rozwiązanie here

Trzeba zdefiniować właściwość resolve na każdej trasie i przypisać mu funkcję zwracającą obietnicę. Funkcja może dynamicznie ładować skrypt zawiera kontroler docelowy i rozwiązać obietnicę po zakończeniu ładowania. W tym dokumencie: article, Dan Wahlin pokazuje, w jaki sposób używać konwencji w stosunku do konfiguracji, aby mieć bardziej praktyczny routing.

+0

Dziękuję za wpis. Bardzo mi pomogło! – VishwaKumar

Powiązane problemy