2017-07-29 3 views
0

Je ne veux pas coder les vues et les contrôleurs de façon normale en utilisant la configuration $ routeProvider. Fondamentalement, je veux s'inscrire à l'événement routechanged, appeler une logique sur le serveur fournissant l'itinéraire actuel, et obtenir la vue/contrôleur approprié retourné comme json (comme une promesse), puis l'avoir compilé/affiché à l'intérieur du section principale de l'application.Comment puis-je laisser le serveur définir la vue et éventuellement le contrôleur lorsque l'itinéraire change en angularjs

Cela semble être un problème trivial, mais je n'ai pas encore trouvé de solution.

J'ai essayé de remplacer ng-view par ng-include, mais je ne suis pas en mesure de changer dynamiquement le ng-controller.

J'ai essayé de créer une directive personnalisée qui enveloppe éventuellement ng-include dans un div avec ng-controller si elle est fournie, mais puisque cette fonction s'exécute dans la fonction template, je ne peux pas résoudre le nom du contrôleur, parce que la fonction de modèle n'a pas accès à la portée

Si quelqu'un peut me montrer le chemin, il serait grandement apprécié.

+0

aucune de cette fonctionnalité est intégrée dans angulaire sans l'aide d'un tiers le module paresseux chargeur – charlietfl

Répondre

0

J'ai fini par faire cela dans mon contrôleur, ce qui semble fonctionner:

function loadPage(page) { 

    var container = $("#main"); 
    var element = $("<div>"); 
    var scope = $rootScope.$new(); 

    server.loadViewTemplate(page.view).then(function(template) { 
     element.html(template); 
     container.html(element); 
     if (page.controller) { 
      var templateController = $controller(page.controller, { $scope: scope }); 
      element.children().data('$ngControllerController', templateController); 
     } 
     $compile(element)(scope); 
    }); 


}