2013-03-01 1 views
11

Ich versuche AngularJS und RequireJS in Kombination zu verwenden. Ich möchte den Service $routeProvider verwenden und vermeiden, dass alle Controller für meine Ansichten beim Start der Anwendung geladen werden müssen. Dafür habe ich folgendes versucht:Verwenden von AngularJS Routing und Laden von Controllern bei Bedarf mit requirjs

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

Leider hat das bei mir nicht funktioniert. Es gibt keine Fehler. Die JS-Datei, die den Controller enthält, wird ordnungsgemäß geladen, aber ich kann den Datengebundenen Wert in der gerenderten Ansicht nicht sehen. Ich habe mich gefragt, ob ich den Wert von controller auf eine andere Weise zuweisen könnte, die auf den asynchronen Aufruf (um die JS-Datei zu laden) warten würde.

Irgendwelche Ideen?

+5

Der einzige Weg, dies zu tun ist, $ ControllerProvider zu bekommen. Ich habe eine funktionierende Lösung hier: https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ Matys84pl das ist eigentlich entlang der Linien von dem, was ich dachte, zu tun. Danke für das Teilen. Eine Sache jedoch, ging ich durch den Code und sah, dass Sie Vorlagen mit dem Require Text-Plugin laden, ist das die einzige unterstützte Möglichkeit zum Laden von Vorlagen mit Ihrer Bibliothek? Was, wenn ich die Vorlage von einer URL auf dem Server laden möchte, würde das funktionieren? – Kassem

+0

Es hängt davon ab, ob die URL relativ zu Ihrer App ist .. mit anderen Worten, ist es auf der gleichen Domain? Wenn nicht, dann denke ich, dass Sie eine Art Proxy verwenden müssen, um das zu erreichen (um Dateien von einer anderen Domain zu laden). – matys84pl

Antwort

4

können Sie die Lösung here

Sie benötigen finden eine resolve-Eigenschaft auf jeder Strecke zu definieren und eine Funktion zuweisen, die ein Versprechen zurückgibt. Die Funktion kann das Skript dynamisch laden, enthält den Zielcontroller und löst das Versprechen, sobald das Laden abgeschlossen ist. In dieser article, zeigt Dan Wahlin, wie man Konvention über Konfiguration verwendet, um praktischeres Routing zu haben.

+0

Vielen Dank für den Beitrag. Hat mir viel geholfen! – VishwaKumar