2013-03-01 5 views
11

Sto tentando di utilizzare AngularJS e RequireJS in combinazione. Vorrei utilizzare il servizio $routeProvider ed evitare di dover caricare tutti i controller per le mie visualizzazioni all'avvio dell'applicazione. Per quello, ho provato il seguente:Utilizzo di AngularJS per routing e caricamento di controller su richiesta utilizzando 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(); 
      }) 
     }}) 
    }]); 
}); 

Sfortunatamente, questo non ha funzionato per me. Non ci sono errori Il file JS contenente il controller viene caricato correttamente ma non riesco a vedere il valore associato ai dati nella vista renderizzata. Mi chiedevo se potessi assegnare il valore di controller in un altro modo che attenda il completamento della chiamata asincrona (per caricare il file JS).

Qualche idea?

+5

L'unico modo per farlo è ottenere $ controllerProvider. Ho una soluzione di lavoro qui: https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ matys84pl che è in realtà sulla falsariga di ciò che stavo pensando di fare. Grazie per aver condiviso questo. Una cosa però, ho esaminato il codice e visto che stai caricando i modelli usando il plug-in Require Text, è l'unico modo supportato per caricare i template usando la tua libreria? Cosa succede se voglio caricare il modello da un URL sul server, funzionerebbe? – Kassem

+0

Dipende se l'url è relativo alla tua app .. in altre parole si trova sullo stesso dominio? In caso contrario, penso che sarebbe necessario utilizzare una sorta di proxy per ottenere (per caricare file da un altro dominio). – matys84pl

risposta

4

È possibile trovare la soluzione here

È necessario definire un resolve su ogni percorso e assegnargli una funzione che restituisce una promessa. La funzione può caricare dinamicamente lo script contiene il controller di destinazione e risolvere la promessa una volta completato il caricamento. In questo article, Dan Wahlin mostra come utilizzare la convenzione sulla configurazione per avere un routing più pratico.

+0

Grazie per il post. Mi ha aiutato molto! – VishwaKumar