J'ai actuellement une application AngularJS avec routage intégré. Cela fonctionne et tout va bien.
Mon fichier app.js ressemble à ceci:
angular.module('myapp', ['myapp.filters', 'myapp.services', 'myapp.directives']).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/', { templateUrl: '/pages/home.html', controller: HomeController });
$routeProvider.when('/about', { templateUrl: '/pages/about.html', controller: AboutController });
$routeProvider.when('/privacy', { templateUrl: '/pages/privacy.html', controller: AboutController });
$routeProvider.when('/terms', { templateUrl: '/pages/terms.html', controller: AboutController });
$routeProvider.otherwise({ redirectTo: '/' });
}]);
Mon application dispose d'un CMS intégré dans lequel vous pouvez copier et ajouter de nouveaux fichiers html dans le répertoire / pages .
Je voudrais toujours passer par le fournisseur de routage même pour les nouveaux fichiers ajoutés dynamiquement.
Dans un monde idéal, le modèle de routage serait:
$ routeProvider.when ('/ nom de page ', {templateUrl: '/ pages / nom de page .html', contrôleur: CMSController});
Donc, si mon nouveau nom de page était "contact.html", j'aimerais que angular prenne "/ contact" et redirige vers "/pages/contact.html".
Est-ce seulement possible?! et si oui comment?!
Mettre à jour
J'ai maintenant ceci dans ma configuration de routage:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
et dans mon CMSController:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
Cela définit le templateUrl actuel sur la bonne valeur.
Cependant, je voudrais maintenant changer le ng-view avec la nouvelle valeur templateUrl. Comment cela est-il accompli?