2013-03-01 1 views
11

J'essaie d'utiliser AngularJS et RequireJS en combinaison. Je voudrais utiliser le service $routeProvider et éviter d'avoir à charger tous les contrôleurs pour mes vues sur le démarrage de l'application. Pour cela, j'ai essayé ce qui suit:Utilisation du routage AngularJS et chargement des contrôleurs à la demande en utilisant 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(); 
      }) 
     }}) 
    }]); 
}); 

Malheureusement, cela n'a pas fonctionné pour moi. Il n'y a pas d'erreurs Le fichier JS contenant le contrôleur est chargé correctement mais je ne peux pas voir la valeur liée aux données dans la vue rendue. Je me demandais si je pouvais assigner la valeur de controller d'une autre manière qui attendrait que l'appel asynchrone (pour charger le fichier JS) se termine.

Des idées?

+5

La seule façon de procéder est d'obtenir $ controllerProvider. J'ai une solution de travail ici: https://github.com/matys84pl/angularjs-requirejs-lazy-controllers – matys84pl

+0

@ matys84pl c'est en fait dans le sens de ce que je pensais faire. Merci d'avoir partagé cela. Une chose cependant, j'ai parcouru le code et vu que vous chargiez des modèles en utilisant le plugin Require Text, est-ce la seule façon de charger des templates en utilisant votre bibliothèque? Que faire si je veux charger le modèle à partir d'une URL sur le serveur, cela fonctionnerait-il? – Kassem

+0

Cela dépend si l'URL est relative à votre application .. en d'autres termes, est-ce sur le même domaine? Si ce n'est pas le cas, je pense que vous devrez utiliser une sorte de proxy pour réaliser cela (pour charger des fichiers d'un autre domaine). – matys84pl

Répondre

4

Vous pouvez trouver la solution here

Vous devez définir une propriété de résolution sur chaque itinéraire et lui attribuer une fonction qui renvoie une promesse. La fonction peut charger dynamiquement le script contenant le contrôleur cible et résoudre la promesse une fois le chargement terminé. Dans ce article, Dan Wahlin montre comment utiliser la convention sur la configuration pour avoir un routage plus pratique.

+0

Merci pour le post. M'a beaucoup aidé! – VishwaKumar

Questions connexes