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?
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
@ 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
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